如何访问Func的值?
本文关键字:函数 目标 bool 的值 Client 何访问 访问 Func | 更新日期: 2023-09-27 18:04:08
我有一个c#方法,声明如下:
public IEnumerable<ClientEntity> Search(Func<Client, bool> searchPredicate)
{
// Uses the search searchPredicate to perform a search.
}
这个方法像这样调用:
string searchCriteria = "My Search Criteria";
bool searchOnlyActive = false;
myClientService.Search(c => c.Name.Contains(searchCriteria) && (c.Active || !searchOnlyActive));
现在,如果我在该方法的开头抛出一个断点,并且在Immediate窗口中查看searchPredicate属性,当我键入searchPredicate时。目标,我得到这样的内容:
{MyNamespace.ClientsService.}
searchCriteria: "My Search Criteria"
searchOnlyActive: false
我想要的是实际获得"我的搜索标准"值和那里显示的假值,就像调试器一样,但我没有设法作为目标属性的类型类似于"<> c_displayclass2",我不知道它来自哪里。我知道这是可以做到的,因为调试器做到了,我只是不知道怎么做。
任何想法?谢谢!
<>c__DisplayClass2
是编译器为获取捕获上下文而创建的类。你可以直接使用反射:
object target = searchPredicate.Target;
if(target != null) {
foreach(var field in target.GetType().GetFields()) {
Console.WriteLine("{0}={1}", field.Name, field.GetValue(target));
}
}
输出:searchCriteria=My Search Criteria
searchOnlyActive=False
然而 !除非你了解匿名方法和捕获的变量(以及如何在编译器生成的上下文类中实现),否则我认为这不会达到你想要的效果;例如,可能没有上下文(Target
是null
),或者多个嵌套上下文…
也:通过Expression<Func<Client,bool>>
表达式树更容易检查,如果这是你的意图。