要检查是否值类型为空目前我在做这样的事情:寻找一个更优雅的方式来检查空值类型
int? i = null;
bool isNullable = i.GetType().ToString().Contains("System.Nullable");
有没有更优雅的方式来做到这一点?
要检查是否值类型为空目前我在做这样的事情:寻找一个更优雅的方式来检查空值类型
int? i = null;
bool isNullable = i.GetType().ToString().Contains("System.Nullable");
有没有更优雅的方式来做到这一点?
您可以使用Nullable.GetUnderlyingType(Type)
- 将返回null
如果它不是可空类型入手,或基础值类型,否则:
if (Nullable.GetUnderlyingType(t) != null)
{
// Yup, t is a nullable value type
}
注意,这里使用了Nullable
静态类,而不是Nullable<T>
结构体。
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
// it is a nullable type
}
这是微软如何建议你Identify Nullable Types
哇 - 对于微软来说,这是一个奇怪的建议,因为有一个内置的方法来做到这一点。 (看我的回答。) – 2010-07-08 17:04:53
是的,它似乎有点更长的啰嗦。看着你的,它是否会返回null,如果它不是一个可为空的类型,并且尽管你可以用它来检查一个类型是否可以为null,但它并非严格意义上的目的? (虽然它更快!) – w69rdy 2010-07-08 17:09:00
@ w69wrdy:它提供了比您需要的更多信息 - 但它以更简单的方式为您提供*所需的所有信息。在可空类型的情况下,它的效率非常低*,因为它也会得到泛型类型的参数......但是我会在任何一天为了可读性和简单性而去做。 – 2010-07-08 17:11:09
int? i;
bool isNullable = i is Nullable;
编辑:没关系,这是行不通的。
你试过这个吗? – 2010-07-08 17:03:51
这看起来没有用,我得到这个编译器警告: 给定的表达式从来没有提供('System.Nullable')类型 – RobSullivan 2010-07-08 17:06:37
@RobSullivan:是的,它检查与System.Nullable静态类的兼容性。 ..这是永远不会工作。我一直假设你有一个'类型'btw实例 - 如果你有一个*实际变量*具体类型,那么你已经知道结果... – 2010-07-08 17:11:58
+1 Id可能会与这一个,因为它更清洁,再加上查看反射器,这也检查,以确保该类型不是一个泛型类型定义。 – SwDevMan81 2010-07-08 17:10:40