gpt4 book ai didi

c# - 从 MemberExpression 获取链接的属性名称

转载 作者:行者123 更新时间:2023-11-30 15:14:45 25 4
gpt4 key购买 nike

我正在为 MVC 创建一个表单生成器,我想通过以下方式模拟 Razor 对链式属性的处理:

builder.TextBoxFor(x => x.User.Email);

这将以与 Razor 相同的方式产生以下内容:

<input id="User_Email" name="User.Email" type="textbox" />

以下代码适用于单级链接(例如 x.Email 生成 Email),但我试图检测在final 属性,然后使用递归返回链中(或至少向上一步)。

private static string GetFieldName<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression)
{
var memberExpression = (MemberExpression) expression.Body;
return memberExpression.Member.Name;
}

我如何调整它以便 x.User.Email 生成 User.Email 而不仅仅是当前的 Email

最佳答案

你需要一点递归:

private static string GetPropertyPath<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression)
{
var propertyPath = new Stack<string>();
var body = (MemberExpression)expression.Body;

do
{
propertyPath.Push(body.Member.Name);

// this will evaluate to null when we will reach ParameterExpression (x in "x => x.Foo.Bar....")
body = body.Expression as MemberExpression;
}
while (body != null);

return string.Join(".", propertyPath);
}

关于c# - 从 MemberExpression 获取链接的属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53828585/

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