【发布时间】:2018-01-03 13:07:47
【问题描述】:
你能解释一下这个奇怪的代码是做什么的吗?
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 对括号。什么意思?
【问题讨论】:
-
调用编译后的
Func<IEnumerable<T>>表达式。 -
仅供参考:第二对
()是.Invoke();的简写,因此该行相当于:expression.Compile().Invoke();
标签: c# .net asp.net-web-api