C# 使用AutoMapper,是否可以将属性值映射到属性?

C# 使用AutoMapper,是否可以将属性值映射到属性?,c#,automapper,C#,Automapper,我正在使用AutoMapper for C#,并尝试将属性值转换为属性名称 考虑以下几点: public class ClassA { public string ParamA { get; set; } public string ParamB { get; set; } } public class ClassB { public string Name { get; set; } public string Val { get; set; } } 我有一

我正在使用AutoMapper for C#,并尝试将属性值转换为属性名称

考虑以下几点:

public class ClassA
{
    public string ParamA { get; set; }
    public string ParamB { get; set; }
}

public class ClassB
{
    public string Name { get; set; }
    public string Val { get; set; }
}
我有一个ClassB实例列表,我正试图根据“Name”的值将ClassB中的“Val”属性值转换为ClassA的正确属性:

ClassB b1=new ClassB(){Name=“ParamA”,Val=“ValueA”};
ClassB b2=new ClassB(){Name=“ParamB”,Val=“ValueB”};
ClassB b3=new ClassB(){Name=“ParamC”,Val=“ValueC”};
List listB=新列表(){b1,b2,b3};
因此,我试图使用listB创建一个类型为
ClassA
的对象,使用
ParamA=“ValueA”
ParamB=“ValueB”
,是否可以使用AutoMapper或任何其他工具

是否可以使用AutoMapper或任何其他工具

您可以使用来执行以下操作:

ClassA a = new ClassA();

foreach (var b in listB)
{
    typeof(ClassA)
        .GetProperty(b.Name) //Get property of ClassA of which name is b.Name
        .SetValue(a , b.Val); //Set the value of such property on object a
}
请注意,根据您的问题,
ClassA
应该有一个名为
ParamC
的属性

是否可以使用AutoMapper或任何其他工具

您可以使用来执行以下操作:

ClassA a = new ClassA();

foreach (var b in listB)
{
    typeof(ClassA)
        .GetProperty(b.Name) //Get property of ClassA of which name is b.Name
        .SetValue(a , b.Val); //Set the value of such property on object a
}

请注意,根据您的问题,
ClassA
应该有一个名为
ParamC
的属性。我曾经找到过这段代码,我一直在使用它来处理这类事情。将此扩展方法放入类中:

    public object this[string propertyName]
    {
      get { return this.GetType().GetProperty(propertyName).GetValue(this, null); }
      set { this.GetType().GetProperty(propertyName).SetValue(this, value, null); }
    }
然后您可以使用[]来执行以下操作

ClassA a;
ClassB b;
...
a[b.Name] = b.Val;

我曾经发现过这段代码,我一直在用它来处理这类事情。将此扩展方法放入类中:

    public object this[string propertyName]
    {
      get { return this.GetType().GetProperty(propertyName).GetValue(this, null); }
      set { this.GetType().GetProperty(propertyName).SetValue(this, value, null); }
    }
然后您可以使用[]来执行以下操作

ClassA a;
ClassB b;
...
a[b.Name] = b.Val;

我没有提到ClassA是第三方,所以我不能向它添加索引器。不过你可能是对的,最好的方法是使用反射。谢谢我没有提到ClassA是第三方,所以我不能向它添加索引器。不过你可能是对的,最好的方法是使用反射。谢谢