如何从Type变量创建Nullable ?
我正在使用表达式,我需要一个接收某种类型的对象(目前未知)的方法。 像这样的东西:
public static void Foobar(object Meh) { }
我需要的是使此方法返回Meh
的Nullable
版本,但类型T
来自Meh.GetType()
。 因此返回将是Nullable
,其中MehType
是Meh
的类型。
有什么想法或建议吗?
谢谢
更新:我之所以需要这个是因为这个例外:
没有为类型’System.Nullable`1 [System.Int32]’和’System.Int32’定义二元运算符Equal。
return Expression.Equal(leftExpr, rightExpr);
其中leftExpr
是System.Nullable1[[System.Int32
和rightExpr
是System.Int32
。
如果你在编译时不知道类型,那么表达它的唯一方法就是作为object
– 只要你打开一个可以为null的值类型,就会得到一个空引用或一个盒装的非可空值类型。
因此,这些片段在结果方面完全相同 :
int? nullable = 3; object result = nullable; int nonNullable = 3; object result = nonNullable;
换句话说,我认为你不能真正表达你想要做的事情。
你必须使用Meh.GetType()
而不是通用吗? 那这个呢?
public static Nullable Foobar (T Meh) where T : struct { }
我假设“某种类型”并不意味着“任何类型”,因为上面的解决方案只适用于值类型。