有可能建立一个Func的集合吗



我正在尝试设置一组动态过滤器,以便在运行时注入到我的ORM对象中(每个实体类型一个(,所以我想做这样的事情:

Filters = new List<Action>
{
(Foo f) => ...,
(Bar b) => ...,
(Goo g) => ...,
};

然后当用户做了类似的事情:

var tSet = db.GetAll<T>().Where(...).ToArray();

我会像一样实现GetAll((

public IQueryable<T> GetAll<T>() where T : class
{
using var db = Connection.Open();
var filter = Filters.FirstOrDefault(f => f.GetType() == typeof(Func<T, bool>)) as Func<T, bool>;
return (FiltersEnabled && filter != null) ? db.Select<T>().Where(filter) : db.Select<T>();
}

有没有可能以某种方式存储List<Func<variousT, bool>>,因为我似乎无法使其工作?我一直试图将其声明为:

protected ICollection<object> Filters = new List<object>();

但这不起作用,而且很明显,由于签名差异,我不能使用Action委托。

由于所有委托都是不同类型的,因此需要声明集合以包含它们的类型:Delegate:

List<Delegate> filters = new List<Delegate>
{
(Func<int, bool>)(i => i > 0),
(Func<string, bool>)(s => s.Length > 0)
};

需要显式转换为Func,因为编译器无法将lambda表达式自动转换为Delegate