如何动态设置属性名称/值?

时间:2011-10-04 23:03:43

标签: c# .net asp.net-mvc

嗨我不确定我是否正确描述它,但基于字符串列表,我想设置属于对象的属性值(所有属性,即对象,与字符串匹配)名称):

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];

}

希望这有道理,如果没有,请告诉我。

谢谢。

2 个答案:

答案 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
        );
}