2
假設下面的委託 「呼叫者」 簽名:拳擊和拆箱:爲什麼這個代表不匹配?
FuncCaller<T>(Func<T, bool> predicate)
和匹配方法:
bool MyFunc(object o)
當T
是引用類型,我可以調用MyFunc
隱含像這樣:
FuncCaller<String>(MyFunc) // valid
相反,當T
是值類型,我打電話MYFUNC時含蓄地得到一個編譯錯誤:
FuncCaller<Int32>(MyFunc) // invalid ("No overload for 'MyFunc(object)' matches delegate 'System.Func<int?,bool>'")
我的問題是,因爲這兩個例子,爲什麼是調用MyFunc
無效的隱式調用時,但有效的調用時明確像這樣:
FuncCaller<Int32>(i => MyFunc(i)) // valid
我認爲這是某種與拳擊和拆箱類型相關的問題?