通过强制转换传递两个类之间的值

本文关键字:两个 之间 转换 | 更新日期: 2023-09-27 17:57:39

我有

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" };

我不想做

b.Name = a.Name;
b.Address = a.Address 

因为我有30多个领域。

我想要的是:

MyClass2 b = a;

通过强制转换传递两个类之间的值

您想要的是不可能的。我建议您使用AutoMapper,它允许您定义映射:

Mapper.CreateMap<MyClass1, MyClass2>();

然后在这两个类的实例之间进行映射:

var a = new MyClass1 { Name = "SomeName", Address = "SomeAddress" };
var b = Mapper.Map<MyClass1, MyClass2>(a);

作为奖励,您将能够执行以下操作:

IEnumerable<MyClass1> list1 = ...
IEnumerable<MyClass2> list2 = Mapper.Map<IEnumerable<MyClass1>, IEnumerable<MyClass2>>(list1);

另一种可能性是使用反射来循环源对象的所有属性,并将它们设置在目标对象中,但既然存在像AutoMapper这样的伟大工具,为什么还要重新发明轮子呢?

最好使用反射,因为它可以循环所有属性,并可以设置匹配属性的值

http://odetocode.com/articles/288.aspx

检查它是如何从属性中检索值的

 PropertyInfo[] properties = type.GetProperties();
 foreach(PropertyInfo property in properties)
 {
 }

作为替代解决方案,您可以在MyClass2中创建一个构造函数,该构造函数接受MyClass1的实例并设置所有属性。

public class MyClass2
{
    public int Id; 
    public string Name;
    public string Address;
    public MyClass2(MyClass1 a)
    {
        this.Name = a.Name;
        this.Address = a.Address;
    }
}

然后你可以做这个

MyClass2 b = new MyClass2(a);

最简单的方法就是在MyClass2 中使用一个名为updateFromClass1(MyClass1)的方法

也可以使用"反射"。使用http://msdn.microsoft.com/en-us/library/ch9714z3.aspx从一个类型中获取所有字段。FieldInfo具有用于更新值的get和set方法。