c# - 通过强制转换在 2 个类之间传递值

标签 c# .net

我有

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 这样出色的工具,为什么还要重新发明轮子呢?

关于c# - 通过强制转换在 2 个类之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6136812/

相关文章:

c# - 在内联数据绑定(bind)上下文中使用扩展方法

.net - 如何将 css class 属性添加到 razor 中的文本框?

.net - ServerGC 应用程序中的 GC 线程数非常高

c# - (C#,连接四)- 为下面的按钮着色

c# - 如何查明特定委托(delegate)是否已分配给某个事件?

c# - 如何防止 ReSharper 在我的 MSpec 字段之间插入一个空行?

c# - 如何获取 IEnumerable<object> 的 linq 总和

c# - 当 AutoPostBack = true 时防止在 AJAX TabContainer 上重新加载页面?

c# - 在 C# 中,是否可以在运行时确定泛型的类型参数?

c# - 林克到 SQL : Most Efficient Way of Looping through List of ID's