无法转换为'方法组'到' System.Action< object>'错误

我创建了以下函数:
public void DelegatedCall(Action<Object> delegatedMethod)
并定义了以下方法
public void foo1(String str) { }
但是,当我尝试用
foo1
调用
DelegateCall
时:
DelegatedCall(foo1);
...我收到以下编译器错误:   
Argument 1: cannot convert from 'method group' to 'System.Action<object>'
这个错误的原因是什么,我该如何纠正?不幸的是,铸造
foo1
Action
不是一种选择。     
已邀请:
DelegatedCall
期望一个代表以任何
object
为参数。但是你传给
DelegatedCall
的函数
foo1
只能应付一个
string
的论点。因此,转换不是类型安全的,因此是不可能的。 输入参数是反式变量,但您的代码需要协方差。 (参见协方差和对比方差之间的差异。) 你可以使
DelegatedCall
通用:
DelegatedCall<T>(Action<T> action)
......或者让任何代表:
DelegatedCall(Delegate action)
但是,实施它是丑陋的,需要反思。它也不验证函数在编译时只有一个参数。     
方差不会那么奏效;你需要的
DelegatedCall(obj => foo1((string)obj));
即使在4.0中,它也不会相信每个对象都是字符串。 请注意,如果它是
foo1(object)
Action<string>
(即相反)它可能会起作用(在4.0中),因为每个字符串都是一个对象。     

要回复问题请先登录注册