测试Type是否为Nullable的不同方法?

Gui*_*shy 7 c# nullable

这是我用来检测我们是否正在处理Nullable类型的条件:

System.Nullable.GetUnderlyingType(itemType) != null
Run Code Online (Sandbox Code Playgroud)

这里是我队友的代码:

itemType.IsGenericType && itemType.GetGenericTypeDefinition() == typeof(Nullable<>)
Run Code Online (Sandbox Code Playgroud)

我们实际上并没有找到一个案例,其中一个将返回true而另一个false(或反之亦然),但这两个片段是否完全相同?

seh*_*ehe 4

来自MSDN 的 Nullable.GetUnderlyingType 方法

nullableType 参数的类型实参(如果 nullableType 参数是封闭泛型可为 null 类型);否则为空。

所以,是的,使用以前的版本是安全的。

从 GetUnderlyingType 反编译:

public static Type GetUnderlyingType(Type nullableType)
{
  if (nullableType == null)
    throw new ArgumentNullException("nullableType");
  Type type = (Type) null;
  if (nullableType.IsGenericType && !nullableType.IsGenericTypeDefinition && nullableType.GetGenericTypeDefinition() == typeof (Nullable<>))
    type = nullableType.GetGenericArguments()[0];
  return type;
}
Run Code Online (Sandbox Code Playgroud)