我正在尝试协变地使用委托 Func <object, T>,但没有成功。尽管 T 可以转换为对象,但 Func<object, T> 似乎不能转换为 Func<object, object> 即使 Func<object, string> (或任何其他具体类型)可以转换为 Func<object, object > 正如预期的那样。请参阅下面演示问题的代码。
public void Register<T>(Expression<Func<object[], T>> factory, Func<bool> constructorSelectionPredicate)
{ object o1;
T o2 = default(T);
o1 = o2; // works fine
Func<object, object> f1 = o => o.GetType();
Func<object, T> f2 = o => o as T;
f1 = f2; //gives conversion error.
f1 = f2 as Func<object, object>; // f2 as Func<object, object> is always null
Func<object[], string> f1 = input => input.GetType().Name;
Func<object[], object> f2 = input => new object();
f2 = f1 // works fine
}
msdn 文档没有直接从我所看到的中解决泛型类型参数的情况。谁能解释这里发生了什么?