我正在使用AutoMapper for C#,我正在尝试将属性值转换为属性名称。
请考虑以下事项:
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<ClassB> listB = new List<ClassB>() {b1, b2, b3};
我有一个ClassB实例列表,我试图根据“Name”的值将ClassB的“Val”属性值转换为ClassA的正确属性:
ClassA
因此,使用listB我正在尝试使用ParamA = "ValueA"
和ParamB = "ValueB"
创建#pragma config JTAGEN = OFF // JTAG Enable OFF (only use for '250)
#pragma config FNOSC = FRCPLL // Fast RC w PLL 8mHz internal rc Osc
#pragma config FPLLIDIV = DIV_10 // PLL in 8mHz/10 = 800 kHz
#pragma config FPLLMUL = MUL_15 // PLL mul 800 khz * 15 = 12 Mhz
#pragma config FPLLODIV = DIV_64 // PLL Out: 12MHz / 64 187.5 kHz
#pragma config FPBDIV = DIV_1 // Peripheral Bus Divisor
#pragma config FCKSM = CSECME // Clock Switch Enable, FSCM Enabled
#pragma config POSCMOD = OFF // Primary osc disabled
#pragma config IESO = OFF // Internal/external switch over
#pragma config OSCIOFNC = OFF // CLKO Output Signal Active on the OSCO Pin
#pragma config FWDTEN = OFF // Watchdog Timer Enable:
类型的对象,是否可以使用AutoMapper或任何其他工具?
答案 0 :(得分:1)
是否可以使用AutoMapper或任何其他工具?
您可以使用Reflection执行以下操作:
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
的媒体资源。
答案 1 :(得分:1)
我曾经发现过这段代码on SO而我正在使用它来处理这些事情。您将此扩展方法放入您的班级:
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;