嗨我不确定我是否正确描述它,但基于字符串列表,我想设置属于对象的属性值(所有属性,即对象,与字符串匹配)名称):
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];
}
希望这有道理,如果没有,请告诉我。
谢谢。
答案 0 :(得分:3)
听起来你正在寻找AutoMapper,它会为你做这一切:
//Once:
Mapper.CreateMap<FromType, ToType>();
//Then:
Mapper.Map(viewModel.Tests, _parentObject.Tests);
如果你想自己做,你需要反思(慢)或编译表达式树(快速)。
答案 1 :(得分: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
);
}