1
我正在嘗試使用一個委託,Func <對象,T >,共同沒有成功。儘管T可轉換爲對象,但Func <對象,T >似乎不可轉換爲Func <對象,對象>即使Func <對象,字符串>(或任何其他具體類型)也可轉換爲Func <對象,對象>如預期的那樣。請參閱下面顯示問題的代碼。協變量和反變量與泛型類型參數一起工作嗎?
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 documentation沒有直接從我所見過的泛型類型參數的情況。任何人都可以解釋這裏發生了什麼?
是你確定?我以前嘗試過類限制無濟於事。我也嘗試使用'where T:object',但編譯器不允許這樣做。我會仔細檢查,只是爲了確保我沒有通過睡眠剝奪做出其他愚蠢的錯誤! – ejspencer 2012-07-19 17:45:59
當我進行了上述兩個更改時,它爲我編譯......編譯器現在給你的錯誤是什麼? – Dylan 2012-07-20 01:22:41
或者是你看到一些奇怪的運行時行爲? – Dylan 2012-07-20 02:20:38