从Nullable <T>中解包T.

Ili*_*a G 0 .net nullable

想要一个简单但有效的方法,在编译时不知道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

Jon*_*eet 7

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>(因为它是非虚拟的).这有点奇怪.