我有声明的方法是这样的:如何使用Func <T, bool>作为Func <object,bool>的参数?
public void OriginalMethod(Func<object,bool> selector)
而且我想从泛型方法调用它,有声明是这样的:
public void GenericMethod<T>(Func<T, bool> selector)
我该怎么办呢?
我有声明的方法是这样的:如何使用Func <T, bool>作为Func <object,bool>的参数?
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's answer。
OriginalMethod(arg => selector((T)arg));
实际的问题是,Func键可能会呼叫未在对象中实现的T的成员。由于OriginalMethod使用对象参数调用它,因此编译器无法确定Func 将与其兼容。注意,调用GenericMethod和OriginalMethod的选择器是如何工作的,因为T保证包含所有对象成员的实现,所以调用Func