nameof(order.User.Age)
只返回 Age
而不是 order.User.Age
以更受限制的方式进行操作的原因是什么?
如果我们只想要姓氏,我们可以做类似的事情
public static GetLastName(this string x) {
return string.Split(x, '.').Last();
}
nameof(order.User.Age).GetLastName()
使用一个运算符,我们可以得到两个,
Age
和 order.User.Age
.但是在当前的实现中,我们只能得到 Age
.这个决定背后有什么逻辑吗?例如,这种行为对于 MVC 绑定(bind)是必需的Html.TextBox(nameof(order.User.Age))
最佳答案
public static string GetMemberString(System.Linq.Expressions.Expression<Func<T, object>> member)
{
if (member == null)
{
throw new ArgumentNullException("member");
}
var propertyRefExpr = member.Body;
var memberExpr = propertyRefExpr as System.Linq.Expressions.MemberExpression;
if (memberExpr == null)
{
var unaryExpr = propertyRefExpr as System.Linq.Expressions.UnaryExpression;
if (unaryExpr != null && unaryExpr.NodeType == System.Linq.Expressions.ExpressionType.Convert)
{
memberExpr = unaryExpr.Operand as System.Linq.Expressions.MemberExpression;
if(memberExpr != null)
{
return memberExpr.Member.Name;
}
}
}
else
{
//gets something line "m.Field1.Field2.Field3", from here we just remove the prefix "m."
string body = member.Body.ToString();
return body.Substring(body.IndexOf('.') + 1);
}
throw new ArgumentException("No property reference expression was found.", "member");
}
关于.net - 为什么 nameof 只返回姓氏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898178/