2011-10-04 53 views
0

嗨我不知道如果我正確地描述它,但基於字符串列表,我想設置屬性的值屬於一個對象(所有屬性,這是對象,匹配的字符串名稱):如何動態設置屬性名稱/值?

var _parentObject = _parentObjectService.GetParentObject(viewModel.Id); 
var _listOfPropertyNames = GetPropertyNames(); 

foreach (var item in _listOfPropertyNames) 
{ 
// Pseudo code, I know it's gibberish: 
_parentObject.Tests.[item] = viewModel.Tests.[item]; 

} 

希望這是有道理的,請讓我知道如果不是。

謝謝。

回答

3

這聽起來像你正在尋找AutoMapper,這將做這一切爲你:如果你想自己做

//Once: 
Mapper.CreateMap<FromType, ToType>(); 

//Then: 
Mapper.Map(viewModel.Tests, _parentObject.Tests); 

,你需要思考(慢)或編譯的表達式樹(快速)。

+0

謝謝你......你會推薦哪些方法?我認爲不是反射,因爲它很慢,但在自己編譯表達式樹或使用AutoMapper之間進行反射? – Mikalee

+0

爲什麼要重新發明輪子?使用AutoMapper。 – SLaks

+0

再次感謝。我將問題標記爲已回答 - 但如果您確實有時間給出使用AutoMapper執行上述操作的示例,我將非常感激,因爲此刻我不熟悉它。謝謝。 – Mikalee

0

使用反射來設置屬性值,按:Set object property using reflection

真正簡單的例子:

void SetParamByName(object obj, string paramName, object value) 
{ 
    obj.GetType() 
     .InvokeMember(
      paramName, 
      BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, 
      Type.DefaultBinder, 
      obj, 
      value 
     ); 
}