デリゲート Func <object, T> を共変的に使用しようとしていますが、成功しません。T はオブジェクトに変換可能ですが、 Func<object, string> (またはその他の具象型) は Func<object, object に変換できますが、 Func<object, T> は 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のドキュメントは、私が見たものから直接ジェネリック型パラメーターのケースに対処していません。ここで何が起こっているのか誰か説明できますか?