如何从Type变量创建Nullable <t>?</t>

时间:2011-08-15 20:59:27

标签: c# nullable

我正在处理表达式,我需要一个接收某种类型(目前未知)对象的方法。像这样:

public static void Foobar(object Meh) { }

我需要做的是让此方法返回Nullable<T>Meh,但T类型来自Meh.GetType()。因此返回值为Nullable<MehType>,其中MehTypeMeh的类型。

有任何想法或建议吗?

由于

更新:我之所以需要这个是因为这个例外:

没有为类型'System.Nullable`1 [System.Int32]'和'System.Int32'定义二进制运算符Equal。

return Expression.Equal(leftExpr, rightExpr);

其中leftExprSystem.Nullable1[[System.Int32rightExprSystem.Int32

2 个答案:

答案 0 :(得分:3)

如果你在编译时不知道类型,表达它的唯一方法是object - 只要你打开一个可以为空的值类型,你就会得到一个空引用,或者一个盒装的不可为空的值类型。

因此,根据结果,这些片段完全等效

int? nullable = 3;
object result = nullable;

int nonNullable = 3;
object result = nonNullable;

换句话说,我认为你不能真正表达你想要做的事情。

答案 1 :(得分:2)

您是否必须使用Meh.GetType()而不是通用?那怎么样?

public static Nullable<T> Foobar<T>(T Meh) where T : struct { }

我假设“某种类型”并不意味着“任何类型”,因为上面的解决方案只适用于值类型。