当前位置: 首页 > 编程语言 > C#

获取强类型的子属性名称分享

时间:2023-04-10 21:44:14 C#

C#学习教程:获取强类型子属性名称staticstringGetPropertyName(ExpressionexpressionForProperty){MemberExpressionexpression=expressionForProperty.BodyasMemberExpression;返回表达式.Member.Name;这允许我使用这样的代码:Product.GetPropertyName(m=>m.Name)返回“Name”。这适用于原始对象。但是,如果我将方法调用更改为:Product.GetPropertyName(m=>m.ProductCategory.Name)这也会返回“名称”。但是为了使数据绑定起作用,我需要它返回“ProductCategory.Name”。有没有办法通过更改方法“GetPropertyName”来实现这一点?一种可能的解决方法是:stringtest=Product.GetPropertyName(p=>p.ProductCategory)+"."+ProductCategory.GetPropertyName(pc=>pc.Name)但是,这不是一个完美的解决方案。这是我在StackOVerflow上找到的一些修改版本:}publicstaticstringGetPropertyName(thisExpression>propertyExpression){returnpropertyExpression.Body.GetMemberExpression().GetPropertyName();}publicstaticstringGetPropertyName(thisMemberExpressionmemberExpression){if(memberExpression==null){returnnull;}if(memberExpression.Member.MemberType!=MemberTypes.Property){返回null;}varchild=memberExpression.Member.Name;varparent=GetPropertyName(memberExpression.Expression.GetMemberExpression());返回父==null?孩子:父母+“。”+孩子;}publicstaticMemberExpressionGetMemberExpression(thisExpressionexpression){if(expressionisMemberExpression)return(MemberExpression)expression;if(表达式是一元表达式)返回(MemberExpression)((UnaryExpression)expression).Operand;返回空值;我提出以下似乎可行的方法:以上是C#学习教程:获取强类型的子属性名分享所有内容,如果对大家有用需要学习更多C#学习教程,希望大家多加注意——publicstaticstringGetComplexPropertyName(Expression>expressionForProperty){//获取表达式主体ExpressionexpressionBody=expressionForProperty.BodyasMemberExpression;字符串表达式AsString=null;//除根属性外的所有属性都将被“转换”switch(expressionBody.NodeType){if(unaryExpression!=null){expressionAsString=unaryExpression.Operand.ToString();}休息;默认值:expressionAsString=expressionBody.ToString();休息;}//确保我们有一个表达式“。”的结果intpositionOfFirstDot=expressionAsString.IndexOf('.');如果(positionOfFirstDot!=-1){returnexpressionAsString.Substring(positionOfFirstDot+1,expressionAsString.Length-1-positionOfFirstDot);}}返回string.Empty;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:

最新推荐
猜你喜欢