我有
public class MyClass1
{
public string Name;
public string Address;
}
public class MyClass2
{
public int Id;
public string Name;
public string Address;
}
var a = new MyClass1 {Name="SomeName", Address="SomeAddress" };
Run Code Online (Sandbox Code Playgroud)
我不想这样做
b.Name = a.Name;
b.Address = a.Address
Run Code Online (Sandbox Code Playgroud)
因为我有30多个领域.
我想要的是:
MyClass2 b = a;
Run Code Online (Sandbox Code Playgroud)
你想要的是不可能的.我建议您使用AutoMapper来定义映射:
Mapper.CreateMap<MyClass1, MyClass2>();
Run Code Online (Sandbox Code Playgroud)
然后在这两个类的实例之间进行映射:
var a = new MyClass1 { Name = "SomeName", Address = "SomeAddress" };
var b = Mapper.Map<MyClass1, MyClass2>(a);
Run Code Online (Sandbox Code Playgroud)
作为奖励,您将能够执行以下操作:
IEnumerable<MyClass1> list1 = ...
IEnumerable<MyClass2> list2 = Mapper.Map<IEnumerable<MyClass1>, IEnumerable<MyClass2>>(list1);
Run Code Online (Sandbox Code Playgroud)
另一种可能性是使用反射来遍历源对象的所有属性并将它们设置在目标对象中但是为什么在存在像AutoMapper这样的优秀工具时重新发明轮子?