我们如何才能到达实例并分配其价值?

时间:2018-05-09 12:22:29

标签: c# .net generics generic-type-argument

我在方法中有foreach代码块,我正在使用这么多地方。

“Title”是“UsefulLinks”类的String类型属性,我提到“之前”。 但我想用我的String变量分配该属性,即fieldName。我们如何才能到达实例并分配其值?

在:

        foreach (var item in vm.UsefulLinks)
        {
            item.Title = usefullLinkTranslations
                .LastOrDefault(t => t.FieldName == fieldName)
                ?.Value;
        }

后:

        foreach (var item in vm.UsefulLinks)
        {
            item.["fieldName"]= usefullLinkTranslations
                .LastOrDefault(t => t.FieldName == fieldName)
                ?.Value;
        }

2 个答案:

答案 0 :(得分:1)

为要支持的每个属性构建switch语句:

foreach (var item in vm.UsefulLinks)
{
    var fieldValue = usefullLinkTranslations.LastOrDefault(t => t.FieldName == fieldName)?.Value;

    switch (fieldName)
    {
        case "Title":
            item.Title = fieldValue;
            break;
        case "Name":
            item.Name = fieldValue;
            break;
        // ...
    }

}

use reflection to assign the property

答案 1 :(得分:0)

你可以像这样使用反射(提到@smile);

var type = typeof(UsefulLinks);
foreach (var item in vm.UsefulLinks)
{
    type.GetProperty(fieldName) // GetField for fields
         .SetValue(
             item, 
             usefullLinkTranslations
                 .LastOrDefault(t => t.FieldName == fieldName)
                 ?.Value
         );
}