想要一个简单但有效的方法,在编译时不知道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;
}
Run Code Online (Sandbox Code Playgroud)
什么都可以在这里完成而不需要动态代码生成?
用于.NET 2.0
o可从来没有参考的实例Nullable<T>.如果您设置了可以为空的值类型值,则最终会得到非可空底层类型的盒装值或空引用.
换句话说,o.GetType()可从来没有返回Nullable<T>的任何的价值o-无论类型o.例如:
Nullable<int> x = 10;
Console.WriteLine(x.GetType()); // System.Int32
Run Code Online (Sandbox Code Playgroud)
在这里,我们最终拳击的值是x因为GetType()声明object并且未被覆盖Nullable<T>(因为它是非虚拟的).这有点奇怪.