假设以下委托“调用者”签名:
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
我认为这是与类型的装箱和拆箱有关的某种问题?