gpt4 book ai didi

.net - 为什么 nameof 只返回姓氏?

转载 作者:行者123 更新时间:2023-12-03 08:57:55 24 4
gpt4 key购买 nike

nameof(order.User.Age)只返回 Age而不是 order.User.Age
以更受限制的方式进行操作的原因是什么?
如果我们只想要姓氏,我们可以做类似的事情

public static GetLastName(this string x) { 
return string.Split(x, '.').Last();
}

nameof(order.User.Age).GetLastName()

使用一个运算符,我们可以得到两个, Ageorder.User.Age .但是在当前的实现中,我们只能得到 Age .这个决定背后有什么逻辑吗?例如,这种行为对于 MVC 绑定(bind)是必需的
Html.TextBox(nameof(order.User.Age))

最佳答案

看看这个方法取自:

https://github.com/okhosting/OKHOSTING.Data/blob/master/src/PCL/OKHOSTING.Data/Validation/MemberExpression.cs

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/

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