我想写一个如下所示的函数
// The type 'MethodGroup' below doesn't exist. This is fantasy-code.
public void MyFunction(MethodGroup g)
{
// do something with the method group
}
后者,我可以使用任何方法组调用MyFunction
。就像这样。
MyFunction(Object.Equals)
如果我提交一个签名,那么一切都会正常工作。
public void MyFunction(Func<object, object, bool> f)
{
// do something with known delegate
}
...
MyFunction(Object.Equals)
方法组Object.Equals
被强制转换为已知的委托类型Func<object, object, bool>
,但我不想提交特定的签名。我希望将任何方法组传递给MyFunction
。
方法组不能转换为System.Object
public void MyFunction(object o)
{
// do something with o
}
...
MyFunction(Object.Equals) // doesn't work
我认为每个人都忘记了方法调用中的大括号,并在某个时候发现了这一点。我希望这并不意味着方法组不能(或不能被转换)为第一类对象。
我不认为Linq表达式会给出我想要的那种通用性,但我肯定会遗漏一些东西。
我还应该提到,如果方法组包含重载,这将是很好的,只要我有一种检查方法组的方法。
我可以打印组中所有方法的所有签名(重载,扩展方法等),或者我可以用一些参数‘调用’组(如果可能的话,让它解析为组中正确的重载)。还有其他方法可以做这些事情,但它们是你可能想要用方法组做的一些事情。
正如一些人所提到的,当我调用MyFunction
时,我可以接受一个Delegate
,并转换为一个特定的已知委托类型。
public void MyFunction(Delegate d)
{
// do something with d
}
...
MyFunction((Func<object, object, bool>)Object.Equals)
但这与传递整个方法组并不完全相同。这将从组中选择一个方法,并将其转换为特定的委托。我真的很想一次通过整个团队。
https://stackoverflow.com/questions/1958880
复制相似问题