想要一个简单而有效的方法,在编译时不知道T时从Nullable获取值。
到目前为止有这样的事情:
public static object UnwrapNullable(object o)
{
if (o == null)
return null;
if (o.GetType().IsGenericType && o.GetType().GetGenericTypeDefinition() == typeof(Nullable<>))
return ???
return o;
}
任何事情都可以在这里完成,而不会涉及动态代码生成?
在.NET 2.0上使用
答案 0 :(得分:7)
o
永远不会引用Nullable<T>
的实例。如果您设置了一个可以为空的值类型值,您最终会得到非可空基础类型的盒装值或空引用。
换句话说,o.GetType()
永远永远不会返回Nullable<T>
o
的任何值 - 无论{的类型如何{1}}。例如:
o
这里我们最终装箱Nullable<int> x = 10;
Console.WriteLine(x.GetType()); // System.Int32
的值,因为在x
上声明了GetType()
而在object
中未被覆盖(因为它是非虚拟的)。这有点奇怪。
答案 1 :(得分:0)
没有意义。
如果你有代码:
int? x = null; //int? == Nullable<int>
if ( null == x ) { Console.WriteLine("x is null"); }
else { Console.WriteLine( "x is " + x.ToString() ); }
结果将在控制台中打印“x is null”。