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

标签 .net c#-6.0 nameof

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/

相关文章:

c# - 可以单声道运行 framework.net 编译的应用程序(来自 VS 环境)

C# - 将十进制转换为 int32

c# - 可以对值类型强制执行 [Required]

c# - 是否可以使用 nameof 运算符暗示 params 数组的参数名称?

c# - `nameof()` 在当前上下文中不存在?

c# - 如何记录复杂的同步过程?

c# - 下面的空条件运算符有什么问题?

c# - 使用 ResourceManager 和 nameof 运算符查找文字资源键

c# - 如何关闭计算机?