从Nullable <t> </t>中解包T.

时间:2011-05-12 15:47:48

标签: .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;
}

任何事情都可以在这里完成,而不会涉及动态代码生成?

在.NET 2.0上使用

2 个答案:

答案 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”。