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

时间:2010-12-29 13:19:16

标签: c# .net lambda expression

  

可能重复:
  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>?

您好,

我想要一个方法,我可以像这样使用

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

方法标题如下所示

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

但我如何找到PropertyA的名称?我需要在返回正确的属性之前做一些检查。 提前谢谢..

欢呼声

PS:感谢发帖How to get names from expression property?我找到了解决方案

它是

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);
}

2 个答案:

答案 0 :(得分:2)

创建ModelMetadata类的实例:

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

现在,您可以获得所需的所有信息,包括模型中使用的属性:

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

答案 1 :(得分:1)

那可能是:

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

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