如何使用 Func 作为 Func 的参数

本文关键字:bool Func 参数 object 何使用 作为 | 更新日期: 2023-09-27 18:18:10

我有一个声明的方法,如下所示:

public void OriginalMethod(Func<object,bool> selector)

我想从泛型方法调用它,它有这样的声明:

public void GenericMethod<T>(Func<T, bool> selector)

我该怎么做?

如何使用 Func<T, bool> 作为 Func<object, bool> 的参数

你不能

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);
}

要么像上面那样,要么像马克的回答那样单行。

OriginalMethod(arg => selector((T)arg));