2010-07-08 55 views

回答

14

您可以使用Nullable.GetUnderlyingType(Type) - 将返回null如果它不是可空类型入手,或基础值类型,否则:

if (Nullable.GetUnderlyingType(t) != null) 
{ 
    // Yup, t is a nullable value type 
} 

注意,这里使用了Nullable静态类,而不是Nullable<T>结构体。

+0

+1 Id可能会与这一个,因为它更清洁,再加上查看反射器,这也检查,以确保该类型不是一个泛型类型定义。 – SwDevMan81 2010-07-08 17:10:40

7
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) 
{ 
    // it is a nullable type 
} 

这是微软如何建议你Identify Nullable Types

+1

哇 - 对于微软来说,这是一个奇怪的建议,因为有一个内置的方法来做到这一点。 (看我的回答。) – 2010-07-08 17:04:53

+0

是的,它似乎有点更长的啰嗦。看着你的,它是否会返回null,如果它不是一个可为空的类型,并且尽管你可以用它来检查一个类型是否可以为null,但它并非严格意义上的目的? (虽然它更快!) – w69rdy 2010-07-08 17:09:00

+0

@ w69wrdy:它提供了比您需要的更多信息 - 但它以更简单的方式为您提供*所需的所有信息。在可空类型的情况下,它的效率非常低*,因为它也会得到泛型类型的参数......但是我会在任何一天为了可读性和简单性而去做。 – 2010-07-08 17:11:09

0
int? i; 
bool isNullable = i is Nullable; 

编辑:没关系,这是行不通的。

+2

你试过这个吗? – 2010-07-08 17:03:51

+0

这看起来没有用,我得到这个编译器警告: 给定的表达式从来没有提供('System.Nullable')类型 – RobSullivan 2010-07-08 17:06:37

+1

@RobSullivan:是的,它检查与System.Nullable静态类的兼容性。 ..这是永远不会工作。我一直假设你有一个'类型'btw实例 - 如果你有一个*实际变量*具体类型,那么你已经知道结果... – 2010-07-08 17:11:58

相关问题