Cannot convert from 'method group' to 'System.Action<object>' error
Solution 1:
DelegatedCall
expects a delegate that takes any object
as an argument. But your function foo1
that you are passing to DelegatedCall
can only cope with a string
argument. So, the conversion isn't type-safe and thus is not possible.
Input parameters are contra-variant, but your code needs covariance. (See Difference between Covariance & Contra-variance.)
You can make DelegatedCall
generic:
DelegatedCall<T>(Action<T> action)
...or have it take any delegate:
DelegatedCall(Delegate action)
But then implementing it is ugly and requires reflection. It also doesn't verify that the function has only one parameter at compile-time.
Solution 2:
Variance doesn't work that way around; you would need
DelegatedCall(obj => foo1((string)obj));
As even in 4.0 it won't believe that every object is a string.
Note that if it was foo1(object)
and Action<string>
(i.e. the other way around) it probably would work (in 4.0), since every string is an object.