类型转换类
答
除非它们以某种方式相关,否则你不能施放它们,例如,一个是其他的基础。
您可以从一个以许多不同的方式映射到另一个,一个是通过使用映射器,AutoMapper是一个众所周知的一个
https://github.com/AutoMapper/AutoMapper
这WIL地图基于其他类成员名称
答
在当类不是在有关的任何方式情况下的另一种溶液(部分形式映射),可使用的dynamic
。 事件,如果这是太危险了,但也算是喜欢的可能的选项之一:
namepsace A {
public class NotRelatedA() {
public void Run() {}
}
}
namepsace B {
public class NotRelatedB() {
public void Run() {}
}
}
dynamic dyn = new A.NotRelatedA();
dyn.Run(); //Run A
dyn = new B.NotRelatedB();
dyn.Run(); //Run B, without changing and mapping anything
重复,这是一种危险的,因为你离开安全的静态类型的世界,并跳转到动态强大的一塌糊涂,所以如果您使用它,请使用它。
答
这些类有多少个属性?他们是“手写”类吗?
也许你不需要两个类,可以删除其中的一个,并使用另一个到处?
也许其中一个类可能来自另一个?然后你将只需要在基类中编写通用属性和方法。
如果需要从其他的(这是一个MSUT有“普通”类型转换(参考转换蒙上)被允许的情况下)两个不同的类,也不导出,你有几种选择:
- 为另一个类的实例中的某个类编写一个构造函数重载作为参数,或者编写一个将一个类的实例“翻译”为另一个类的新对象的静态方法,或者
- 你可以写一个
public static explicit operator ClassOne(ClassTwo ct)
做了“翻译”。有了它,就可以使用标准的演算语法(例如(ClassOne)variable
)或 - 正如其他人所建议的那样,您可以使用映射工具,或编写自己的反射代码来查找“看起来相似”的属性他们。
你不能以任何方式进行投射。这是一个类似[AutoMapper](https://github.com/AutoMapper/AutoMapper)的工作。 –
我认为你正在寻找*映射*,而不是*铸造*。 – sloth
这里你有很多的例子http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/808ad927-385f-49c9-aace-256eefe659d7 –