如何动态设置属性名称/值
本文关键字:属性 设置 何动态 动态 | 更新日期: 2023-09-27 18:10:22
嗨,我不确定我是否正确地描述了它,但是基于字符串列表,我想设置属于对象的属性值(所有属性,都是对象,与字符串名称匹配):
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];
}
希望这是有意义的,如果不是,请告诉我。
谢谢。
听起来你在寻找AutoMapper,它会为你做这一切:
//Once:
Mapper.CreateMap<FromType, ToType>();
//Then:
Mapper.Map(viewModel.Tests, _parentObject.Tests);
如果你想自己做,你需要反射(慢)或编译表达式树(快)。
使用反射来设置属性值,如下所示:
非常简单的例子:
void SetParamByName(object obj, string paramName, object value)
{
obj.GetType()
.InvokeMember(
paramName,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder,
obj,
value
);
}