【发布时间】:2016-03-27 02:16:41
【问题描述】:
我是 c# 和 lambda 表达式的新手;在this 教程中,我无法理解代码对这个 Lambda 表达式的作用:
public ViewModel()
{
base.AddRule(() => Aid, () =>
Aid.Length >= (5 * 2) &&
Aid.Length <= (16 * 2) &&
Aid.Length % 2 == 0, "Invalid AID.");
}
这是AddRule 方法,教程说它将规则添加到规则字典中:
public void AddRule<T>(Expression<Func<T>> expression, Func<bool> ruleDelegate, string errorMessage)
{
var name = GetPropertyName(expression);
ruleMap.Add(name, new Binder(ruleDelegate, errorMessage));
}
和
protected static string GetPropertyName<T>(Expression<Func<T>> expression)
{
if (expression == null)
throw new ArgumentNullException("expression");
Expression body = expression.Body;
MemberExpression memberExpression = body as MemberExpression;
if (memberExpression == null)
{
memberExpression = (MemberExpression)((UnaryExpression)body).Operand;
}
return memberExpression.Member.Name;
}
}
() => Aid 是什么意思,为什么addrule 接收它并将其转换为 UnaryExpression 和 MemberExpression?
【问题讨论】: