获取财产价值问题

时间:2014-10-16 07:35:30

标签: c# asp.net-mvc entity-framework

我使用Reflection来根据指定的动态列名称(模型属性)获取值。

我的问题是当我传递propName时,它在全部大写中,如果我在LowerCase()中转换它,它仍然与Model property不匹配。

这是代码: -

public object GetPropValue(object obj, string propName)
{
     return obj.GetType().GetProperty(propName).GetValue(obj, null);
}


 var Fields = obj.GetPropValue(Employee, item.Key);  // item.key = 'ADDRESS'

public class Employee
{
      public string Address { get; set; }
      ....
}

这是什么解决方案?

2 个答案:

答案 0 :(得分:1)

如果您不知道确切的财产名称案例:

public object GetPropValue(object obj, string propName)
{
    var property = obj.GetType()
                      .GetProperties()
                      .SingleOrDefault(p=>p.Name.Equals(propName, StringComparison.OrdinalIgnoreCase));

    return property != null ? property.GetValue(obj, null) : null;
}

答案 1 :(得分:0)

BindingFlags.IgnoreCase作为第二个参数传递给GetProperty以获取属性而不检查大小写:

public object GetPropValue(object obj, string propName)
{
     return obj.GetType()
         .GetProperty(propName, BindingFlags.Instance | BindingFlags.IgnoreCase )
         .GetValue(obj, null);
}