gpt4 book ai didi

c# - 解释 expression.Compile()() 中的 2 对括号

转载 作者:IT王子 更新时间:2023-10-29 04:48:22 26 4
gpt4 key购买 nike

你能解释一下这段奇怪的代码是做什么的吗?

expression.Compile()();

为什么这里有两对括号?我没有在谷歌中找到任何东西。完整的方法是

public Validator NotEmpty(Expression<Func<IEnumerable<T>>> expression)
{
var member = (MemberExpression)expression.Body;
string propertyName = member.Member.Name;
IEnumerable<T> value = expression.Compile()();

if (value == null || !value.Any())
{
ValidationResult.AddError(propertyName, "Shouldn't be empty");
}
return this;
}

它是这样使用的:

_validator.NotEmpty(() => request.PersonIds);  // request.PersonIds is List<int>

此方法检查集合是否为空或 null。一切正常,但我对该代码有点困惑。我以前从未见过在 C# 中使用 2 对括号。什么意思?

最佳答案

那么,您将 int 列表作为表达式树传递到方法中。此表达式产生 IEnumerable<T> 的值(在本例中为 IEnumerable<int>)。

要获取表达式的值,您需要将此表达式编译成委托(delegate) Func<IEnumerable<T>>然后调用委托(delegate)。事实上,我可以单独编写两行代码来代替上面使用的较短语法:

Func<IEnumerable<T>> del = expression.Compile();
IEnumerable<T> value = del();

关于c# - 解释 expression.Compile()() 中的 2 对括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48078042/

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