gpt4 book ai didi

c# - 给定一个成员访问 lambda 表达式,将其转换为具有完整访问路径的特定字符串表示形式

转载 作者:IT王子 更新时间:2023-10-29 04:12:52 26 4
gpt4 key购买 nike

给定一个

Expression<Func<T, object>> 

(例如 x => x.Prop1.SubProp),我想根据需要创建一个字符串“Prop1.SubProp”。

在单次访问的情况下(例如 x => x.Prop1),我可以很容易地做到这一点:

MemberExpression body = (expression.Body.NodeType == ExpressionType.Convert) ? (MemberExpression)((UnaryExpression)expression.Body).Operand : (MemberExpression)expression.Body;
return body.Member.Name;

但是,如果有更深的嵌套,例如x => x.Prop1.SubProp1,这只会得到嵌套最深的名称,例如“SubProp1”而不是“Prop1.SubProp1”

有没有办法访问 lambda 表达式的完整属性路径?

最佳答案

public string GetPath<T>(Expression<Func<T, object>> expr)
{
var stack = new Stack<string>();

MemberExpression me;
switch (expr.Body.NodeType)
{
case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
var ue = expr.Body as UnaryExpression;
me = ((ue != null) ? ue.Operand : null) as MemberExpression;
break;
default:
me = expr.Body as MemberExpression;
break;
}

while (me != null)
{
stack.Push(me.Member.Name);
me = me.Expression as MemberExpression;
}

return string.Join(".", stack.ToArray());
}

关于c# - 给定一个成员访问 lambda 表达式,将其转换为具有完整访问路径的特定字符串表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3049825/

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