很遗憾,"代表"这样的东西几乎不存在。对于大多数目的(特别是:解析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());
如果你
真的想使用委托(delegate),那么类型必须是可预测的,例如:
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)
GetData()
的任何信息吗?你知道它是否总是没有参数,或者类似的东西吗? - svick