2010-10-28 40 views

回答

3

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

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

,你会在AutoMapper使用这样的:

.ForMember(dest => dest.id, opt => opt.MapFrom(src => GetProperty(src, propertyName))) 
+0

+1但是这个代码可以改进,因为它目前不适用于静态属性/字段。 – 2010-10-28 03:11:46

+0

我将AutoMapper用例解释为暗示它只需从src获取实例成员,但您肯定是这样,对于静态成员来说,同样的技术也是适用的。 – dahlbyk 2010-10-28 03:18:06

+0

一切正常,除了源代码是一个“var”.Select()投影,它具有一个“object”类型,并且AutoMapper没有找到任何要映射的字段。大声笑。 – 2010-10-28 03:24:29

1

如果您有希望访问的属性的名称,则可以使用反射来获取MemberInfo,然后从MemberInfo调用该属性。

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

当然,这假定珍闻SRC 具有属性和propertyName的识别对象上的属性。

+0

甜,期待着答案。 – 2010-10-28 02:44:34