如何从表达式属性中获取名称?

发布于 2024-10-09 17:41:51 字数 1253 浏览 2 评论 0 原文

可能的重复:
使用 lambda 表达式获取方法名称和类型
我可以使用 Expression>并可靠地查看 Func 中引用了哪些属性?

并可靠

哪些

<% Html.TextBoxFor(x=>x.Property, Helper.GetAttributes<ViewModel>(x=>x.PropertyA)) %>

属性

public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)

地 属性A?在返回正确的属性之前我需要做一些检查。 提前致谢..

干杯

PS:感谢 driis 帖子 如何从表达式属性获取名称? 我找到了解决

方案

public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)
{
    var item = myParam.Body as UnaryExpression;
    var operand = item.Operand as MemberExpression;
    Log.Debug(operand.Member.Name);
}

Possible Duplicates:
Get method name and type using lambda expression
Can I use Expression<Func<T, bool>> and reliably see which properties are referenced in the Func<T, bool>?

Hi,

I want to have a method, which I can use like this

<% Html.TextBoxFor(x=>x.Property, Helper.GetAttributes<ViewModel>(x=>x.PropertyA)) %>

The method header looks like this

public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)

but how do i find out the name of PropertyA? i need to do some checks before returning the right attributes.
thanks in advance..

cheers

PS: thanks to driis post How to get names from expression property? i found the solution

it is

public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)
{
    var item = myParam.Body as UnaryExpression;
    var operand = item.Operand as MemberExpression;
    Log.Debug(operand.Member.Name);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

随梦而飞# 2024-10-16 17:41:51

创建 ModelMetadata 类的实例:

var data = ModelMetadata.FromLambdaExpression<T, object>(myParam);

现在您可以获得有关模型上使用的属性的所有所需信息:

var propName = data.PropertyName;
var label = data.DisplayName;

Create an instance of a ModelMetadata class:

var data = ModelMetadata.FromLambdaExpression<T, object>(myParam);

And now you can get all the information you need, with respect to attributes used on your model:

var propName = data.PropertyName;
var label = data.DisplayName;
情话已封尘 2024-10-16 17:41:51

这可能是:

string propertyName = ((MemberExpression) myParam.Body).Member.Name;

在生产代码中,您可能应该在强制转换之前检查表达式类型,如果传入的表达式不是 MemberExpression,则抛出适当的异常。

That could be:

string propertyName = ((MemberExpression) myParam.Body).Member.Name;

In production code, you should probably check the Expression type before the cast and throw an appropiate exception if the expression passed in is not MemberExpression.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文