代码之家  ›  专栏  ›  技术社区  ›  Zachary Scott

C:给定的SRC=>SRC.property,如果您有一个字符串“propertyname”,代码选择property?

  •  1
  • Zachary Scott  · 技术社区  · 14 年前

    我正在使用automapper,它有:

    .ForMember( dest => dest.id, opt => opt.MapFrom(src => src.id))
    

    使用最右边的表达式 src => src.id ,如果我有一个带有属性名称的字符串变量,我将如何根据它选择属性?

    我试过这个:

    src => propertyName
    

    然后在值为“id”时不得不笑。

    2 回复  |  直到 14 年前
        1
  •  3
  •   dahlbyk    14 年前

    可以使用反射按名称获取属性:

    private R GetProperty<T, R>(T obj, string propertyName)
    {
        PropertyInfo pi = obj.GetType().GetProperty(propertyName);
        return (R)pi.GetValue(obj, null);
    }
    

    您可以在automaper中使用,如下所示:

    .ForMember( dest => dest.id, opt => opt.MapFrom(src => GetProperty(src, propertyName)))
    
        2
  •  1
  •   Les    14 年前

    如果您具有要访问的属性的名称,则将使用反射获取memberinfo,然后从memberinfo调用该属性。

    src => src.GetType().GetProperty(propertyName).GetGetMethod().Invoke(src, new object[] {})
    

    当然,这个小道消息假定 SRC 具有属性,并且该属性名标识对象上的属性。