Why does nameof return only last name?

前端 未结 5 908
南笙
南笙 2020-12-16 09:45

nameof(order.User.Age) return only Age instead of order.User.Age

What is the reason to do it in more restricted way? If we wan

5条回答
  •  春和景丽
    2020-12-16 10:06

    Take a look at this method taken from:

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

    public static string GetMemberString(System.Linq.Expressions.Expression> 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");
        }
    

提交回复
热议问题