gpt4 book ai didi

c# - 如何访问 Func 的目标值?

转载 作者:行者123 更新时间:2023-11-30 15:35:05 25 4
gpt4 key购买 nike

我有一个 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));

现在,如果我在该方法的开头抛出一个断点,然后在立即窗口中查看 searchPredicate 属性,当我键入 searchPredicate.Target 时,我会得到如下内容:

{MyNamespace.ClientsService.}
searchCriteria: "My Search Criteria"
searchOnlyActive: false

我想要的是实际获得“我的搜索条件”值和在那里显示的假值,就像调试器一样,但我没有设法做到,因为 Target 属性的类型类似于“<> 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

但是!除非您了解匿名方法和捕获的变量(以及如何根据编译器生成的上下文类来实现),否则我认为这不会做您想要的;例如,可能没有上下文(一个 Targetnull ),或者多个嵌套上下文...

另外:表达式树来自 Expression<Func<Client,bool>>如果这是您的意图,则更易于检查。

关于c# - 如何访问 Func<Client, bool> 的目标值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15433123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com