【发布时间】:2017-04-25 22:45:16
【问题描述】:
如果我需要一些特定类型的代码,我可以使用typeof,例如:
private static bool IsNumericType(Type type)
{
return type == typeof(int) || type == typeof(decimal); //etc
}
但我也可以使用枚举TypeCode
private static bool IsNumeric(TypeCode objTypeCode)
{
return objTypeCode == TypeCode.Int16 || objTypeCode == TypeCode.Int32 || objTypeCode == TypeCode.Int64; // etc ||
}
从架构和性能的角度来看,使用TypeCode 比使用typeof 有什么好处?在哪种情况下我应该使用两者之一?
仅供参考,从值中获取 type / typeCode 的代码:
var type = value.GetType();
var typeCode = Convert.GetTypeCode(value);
PS:这些示例被高度简化。
PS 2:如果我传递值,我也可以使用as、is 等。但在这种情况下,我不喜欢发送,因为方法不需要知道值,只有它是输入。
【问题讨论】:
-
我相当肯定以前的 sn-p 性能会更好。基于
typeof()在编译时与运行时执行的事实。它也不需要Convert.GetTypeCode()调用。不过,您始终可以对其进行基准测试并亲自查看! -
GetTypeCode 在 .NET 版本 1 中潜入。在那些没有泛型的黑暗厄运绝望的日子里,让 switch 语句高效返回非常重要。这在版本 2 中得到了修复。他们甚至在版本 7 中修复了 switch 语句。