【发布时间】:2013-01-15 10:52:30
【问题描述】:
我正在使用 .NET 为 Windows 应用商店应用程序编写一个 pluralization 框架。对于自定义格式化程序string Format(string format, params object[] args),我有以下代码:
public static bool IsExactlyOne(object n)
{
if (n is Int16)
{
return (Int16)n == 1;
}
if (n is int) // Int32
{
return (int)n == 1;
}
if (n is long) // Int64
{
return (long)n == 1L;
}
if (n is UInt16)
{
return (UInt16)n == 1U;
}
if (n is uint) // UInt32
{
return (uint)n == 1U;
}
if (n is ulong) // UInt64
{
return (ulong)n == 1UL;
}
if (n is byte)
{
return (byte)n == 1;
}
if (n is sbyte)
{
return (sbyte)n == 1;
}
if (n is float)
{
return (float)n == 1.0F;
}
if (n is double)
{
return (double)n == 1.0D;
}
if (n is decimal)
{
return (decimal)n == 1.0M;
}
throw new ArgumentException("Unsupported type");
}
如您所见,它非常冗长。有什么方法可以简化这个吗?请注意:IConvertible不可用于 Windows 应用商店应用。
【问题讨论】:
-
使用
object有什么具体原因吗?我会改用ulong或double,因为隐式转换应该完成其余的工作?而且我不希望传递一个字符串、列表或其他东西。 -
有时你别无选择(例如 IValueConverter)
-
@Mario:是
object,因为这个函数是遵循.NET 风格Format(string format, params object[] args)的自定义格式化程序的一部分 -
我认为你最好保持原样。有太多的极端情况需要检查你是否尝试比这更短的方法。
-
@Sebastian Negraszus:你试过我回答中的代码吗?
标签: c# .net windows-8 windows-store-apps