如何简化单个对象匹配Func<T, bool>条件的测试逻辑?
如何直接用Func<T, bool>判断单个对象是否匹配条件?
你当前的实现确实可以运行,但完全没必要绕创建列表的弯路——直接调用Func<T, bool>委托本身就可以完成判断。
简化实现
Func<T, bool>本质就是一个接收T类型参数、返回布尔值的方法,你可以直接把测试对象传入委托执行,得到是否匹配的结果:
修改你的Match方法为:
public bool Match<T>(Func<T, bool> condition, T testObject) { return condition(testObject); }
甚至连Match方法都可以省略,直接在调用处执行委托:
Console.WriteLine(compiledQuery(testMatch));
原理说明
你通过Sprint.Filter.OData编译得到的compiledQuery就是一个Func<Test, bool>类型的委托,它本身的设计就是接收Test对象并返回该对象是否满足条件的布尔值。之前用列表+LINQ的方式属于多此一举,直接调用委托才是最直接高效的实现。
内容的提问来源于stack exchange,提问作者Helmut
相关产品推荐
相关产品推荐

