我正在处理表达式,我需要一个接收某种类型(目前未知)对象的方法。像这样:
public static void Foobar(object Meh) { }
我需要做的是让此方法返回Nullable<T>
版Meh
,但T
类型来自Meh.GetType()
。因此返回值为Nullable<MehType>
,其中MehType
是Meh
的类型。
有任何想法或建议吗?
由于
更新:我之所以需要这个是因为这个例外:
没有为类型'System.Nullable`1 [System.Int32]'和'System.Int32'定义二进制运算符Equal。
return Expression.Equal(leftExpr, rightExpr);
其中leftExpr
是System.Nullable1[[System.Int32
而rightExpr
是System.Int32
。
答案 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 { }
我假设“某种类型”并不意味着“任何类型”,因为上面的解决方案只适用于值类型。