我有一个声明如下的方法:
public void OriginalMethod(Func<object,bool> selector)
我希望从通用方法中调用它,该方法的声明如下:
public void GenericMethod<T>(Func<T, bool> selector)
我该如何做到这一点?
我有一个声明如下的方法:
public void OriginalMethod(Func<object,bool> selector)
我希望从通用方法中调用它,该方法的声明如下:
public void GenericMethod<T>(Func<T, bool> selector)
我该如何做到这一点?
你不能直接将 selector
传递给 OriginalMethod
:它期望一个接受任何 object
的方法,但是 Func<T, bool>
只接受类型为 T
的对象。
当然,你可以欺骗一下:
OriginalMethod(o => selector((T)o));
但是,如果OriginalMethod
使用一个无法转换为T的对象调用该方法,它将失败...
Func<object, bool>
,调用传入的类型函数。public void GenericMethod<T>(Func<T, bool> selector)
{
Func<object, bool> untypedSelector = (object obj) => selector((T)obj);
OriginalMethod(untypedSelector);
}
可以像上面那样,也可以像Marc的答案一样简洁明了。
OriginalMethod(arg => selector((T)arg));