2010-10-28 25 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

相關問題