我在不同的命名空间中有两个类,我需要进行类型转换。
如何在另一个类中键入一个类的转换对象。这两个类具有相同的方法和属性。
反射会起作用吗?任何类的类型转换示例都会有所帮助。
您不能直接从一种类型转换为另一种类型,您可以执行以下操作:
除非它们以某种方式相关,否则您不能转换它们,例如,一个是另一个的基础。
您可以通过许多不同的方式从一个映射到另一个,一种是使用映射器,AutoMapper 是一个众所周知的
https://github.com/AutoMapper/AutoMapper
这将根据类成员名称从一个映射到另一个
如果类不以任何方式相关,另一种解决方案(零件形式映射)可以使用. 事件如果这太危险了,但可以被视为可能的选项之一: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)
做“翻译”的。这样,就可以使用标准的强制转换语法(即 say (ClassOne)variable
),或者