这是我用来检测我们是否正在处理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(或反之亦然),但这两个片段是否完全相同?
来自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)