目前,我们可以编写来检查这一点的代码只是列出所有可能的类型integral,如下所示:
public static bool IsIntegral(this Type type)
{
return type == typeof(int) || type == typeof(uint) ||
type == typeof(short) || type == typeof(ushort) ||
type == typeof(long) || type == typeof(ulong) ||
type == typeof(byte);
}
我想知道是否有一些更好更干净的方法不应该涉及任何与字符串转换/转换的技巧(我认为这不会很好,即使我们必须从 Type using 创建一些虚拟实例Activator)。
很遗憾,这样的事情不起作用:
typeof(long).IsAssignableFrom(type);
而实际上在代码中我们可以这样写:
int i = 5;
long l = i;//this looks much like long can be assignable from int
但实际上它们(long 和 int)在这里没有任何继承关系,编译器似乎在这里做了一些神奇的自动转换以使上述代码有效。