2012-12-03 129 views
1

我有两个不同的命名空间类,我需要输入类型转换。类型转换类

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

可能反射会起作用吗? 任何类型类型转换的例子都会有帮助。

+1

你不能以任何方式进行投射。这是一个类似[AutoMapper](https://github.com/AutoMapper/AutoMapper)的工作。 –

+0

我认为你正在寻找*映射*,而不是*铸造*。 – sloth

+0

这里你有很多的例子http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/808ad927-385f-49c9-aace-256eefe659d7 –

回答

2

你不能从一种类型到另一种直接投,你可以这样做:

  1. 手动映射
  2. 自动使用反射贴图(如属性格式名相同)
  3. 使用AutoMapper
1

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

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

https://github.com/AutoMapper/AutoMapper

这WIL地图基于其他类成员名称

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 

重复,这是一种危险的,因为你离开安全的静态类型的世界,并跳转到动态强大的一塌糊涂,所以如果您使用它,请使用它。

0

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

也许你不需要两个类,可以删除其中的一个,并使用另一个到处?

也许其中一个类可能来自另一个?然后你将只需要在基类中编写通用属性和方法。

如果需要从其他的(这是一个MSUT有“普通”类型转换(参考转换蒙上)被允许的情况下)两个不同的类,也不导出,你有几种选择:

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