C# 如何访问Func的目标值<;客户,bool>;?

C# 如何访问Func的目标值<;客户,bool>;?,c#,linq,C#,Linq,我有一个C#方法,声明如下: public IEnumerable<ClientEntity> Search(Func<Client, bool> searchPredicate) { // Uses the search searchPredicate to perform a search. } 现在,如果我在该方法的开头抛出一个断点,并在即时窗口中查看searchPredicate属性,当我键入searchPredicate.Target时,我会得到如下结

我有一个C#方法,声明如下:

public IEnumerable<ClientEntity> Search(Func<Client, bool> searchPredicate)
{
    // Uses the search searchPredicate to perform a search.
}
现在,如果我在该方法的开头抛出一个断点,并在即时窗口中查看searchPredicate属性,当我键入searchPredicate.Target时,我会得到如下结果:

{MyNamespace.ClientsService.}
    searchCriteria: "My Search Criteria"
    searchOnlyActive: false
我想要的是像调试器一样,实际获取“我的搜索条件”值和显示在那里的假值,但我没有成功,因为目标属性的类型类似于“c_uDisplayClass2”,我不知道这是从哪里来的。我知道这是可以做到的,因为调试器做到了,我只是不知道怎么做

有什么想法吗?谢谢

c\uu 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
然而!除非您了解匿名方法和捕获的变量(以及如何在编译器生成的上下文类中实现匿名方法和捕获的变量),否则我认为这不会达到您想要的效果;例如,可能没有上下文(即
null
Target
)或多个嵌套上下文


另外:如果这是您的意图,那么通过
expression
的表达式树更易于检查。

您正确地返回了一个异常类(
c_udisplayClass2
),而不是您的
ClientEntity
。尝试显示执行搜索的代码“获取显示的值”=>在哪里?您已经在即时窗口中获得了它们。如果myClientService.Search需要您要传递的谓词的内部结构,则不应传递委托,而应传递描述您要搜索内容的结构(例如,它可以包含诸如Criteria和OnlyActive之类的属性)。通过传递一个委托,您将从这个方法中抽象出过滤逻辑。如果您只想在对象上运行谓词,请使用语法
bool isMatch=searchPredicate(someClient)
。我不太担心上下文,我只使用此反射模拟单元测试的一些行为,因此它将是一个非常可控的环境。再次感谢!
searchCriteria=My Search Criteria
searchOnlyActive=False