类别类

时间:2012-12-03 09:26:34

标签: c# class casting

我在不同的命名空间中有两个类,我需要输入cast。

如何在另一个类中输入一个类的强制转换对象。这两个类都有相同的方法和属性。

5月反思会起作用吗? 类的类型转换的任何例子都会有所帮助。

4 个答案:

答案 0 :(得分:2)

你不能直接从一种类型转换为另一种类型,你可以这样做:

  1. 手动映射
  2. 使用反射自动映射(因为名称相同)
  3. 使用AutoMapper

答案 1 :(得分:1)

除非它们以某种方式相关,否则你不能施放它们,例如,一个是其他的基础。

您可以通过多种不同的方式从一个映射到另一个,一个是使用映射器,AutoMapper是众所周知的一个

https://github.com/AutoMapper/AutoMapper

这个wil会根据类成员名称从一个映射到另一个

答案 2 :(得分:0)

如果类与任何方式无关,则另一种解决方案(部件表单映射)可以使用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

重复一遍,这是一种危险,因为你离开安全的静态类型世界,并跳进动态强大的混乱,所以如果你使用它,使用它与causion。

答案 3 :(得分:0)

这些课程有多少属性?他们是“手写”课程吗?

也许你不需要两个类,可以删除其中一个并在其他地方使用另一个?

也许其中一个类可能来自另一个类?然后,您只需要在基类中编写公共属性和方法。

如果你需要两个不同的类,并且都不是从另一个派生的(这是一个msut对于允许“普通”强制转换(参考转换强制转换)的情况),你有几个选择:

  1. 为其中一个接受另一个类的实例作为参数的类编写构造函数重载,或者
  2. 编写一个静态方法,将一个类的实例“转换”为另一个类的新对象,或者
  3. 你可以写一个public static explicit operator ClassOne(ClassTwo ct)做“翻译”。有了它,它允许使用标准的强制转换语法(即说(ClassOne)variable)或
  4. 正如其他人所建议的那样,您可以使用映射工具,或者编写自己的反射代码,找到“看起来很相似”的属性。