不幸的是,几乎没有“代表”这样的东西。对于大多数目的(尤其是:解析 a MethodInfo
),它必须是强类型委托。这是因为GetData
不是方法,而是方法组。你真的需要精确地指定方法,或者有一个已知的委托类型(最终做同样的事情)。
你有两个实用的选择;工作object
,或添加一个通用的。例如:
void Method<TObjectType>(Expression<Func<TObjectType,object>> ex) {...}
会起作用,就像:
void Method<TObjectType, TValue>(Expression<Func<TObjectType,TValue>> ex) {...}
调用者将使用:
Method<Foo>(x => x.GetData());
如果你真的想使用委托,那么类型必须是可预测的,例如:
void Method<TObjectType>(Expression<Func<TObjectType,Func<int>>> ex)
允许:
Method<Foo>(x => x.GetData);
或者,如果您知道(例如)该方法始终是无参数的,但您不知道返回类型;也许是这样的:
void Method<TObjectType, TValue>(Expression<Func<TObjectType,Func<TValue>>> ex)
这使得:
Method<Foo, int>(x => x.GetData);