将类的对象转换为另一个对象

我有两个类几乎相同,除了存储在它们中的数据类型。 一个类包含所有double值,而other包含所有float值。

class DoubleClass { double X; double Y; double Z; } class FloatClass { float X; float Y; float Z; } 

现在我有一个DoubleClass点,我想转换为FloatClass。

 var doubleObject = new DoubleClass(); var convertedObject = (FloatClass)doubleObject; // TODO: This 

一种简单的方法是创建一个创建新FloatClass对象的方法,填充所有值并返回它。 有没有其他有效的方法来做到这一点。

使用转换运算符:

 public static explicit operator FloatClass (DoubleClass c) { FloatCass fc = new FloatClass(); fc.X = (float) cX; fc.Y = (float) cY; fc.Z = (float) cZ; return fc; } 

然后使用它:

 var convertedObject = (FloatClass) doubleObject; 

编辑

我将操作符更改为explicit而不是implicit因为我在示例中使用了FloatClass 。 我更喜欢使用explicit过度implicit因此它强制我确认对象将被转换为什么类型(对我而言,它意味着更少的分心错误+可读性)。

但是,您可以使用implicit转换,然后您只需要执行以下操作:

 var convertedObject = doubleObject; 

参考

您可以使用Conversion Operators来实现此目的。

Fr示例:

 struct FloatClass { public FloatClass(DoubleClass dClass) { //conversion... } ... public static explicit operator FloatClass(DoubleClass dClass) { FloatClassd = new FloatClass(dClass); // explicit conversion return d; } } var convertedObject = (FloatClass)doubleObject; 

听起来你可以在这里使用generics:

  public class GenericClass { TX { get; set; } TY { get; set; } TZ { get; set; } } GenericClass floatClass = new GenericClass(); GenericClass doubleClass = new GenericClass(); 

您可以添加隐式类型转换运算符 :

 public class DoubleClass { public double X; public double Y; public double Z; public static implicit operator FloatClass(DoubleClass d) { return new FloatClass { X = (float)dX, Y = (float)dY, Z = (float)dZ }; } } 

现在这个工作:

 DoubleClass doubleObject = new DoubleClass(); FloatClass convertedObject = doubleObject; 

最简单的方法是使用序列化程序。 使用最有效的Newtonsoft JSON序列化程序。

使用Newtonsoft.Json;

  private void Convert() { DoubleClass doubleClass = new DoubleClass {X = 123.123, Y = 321.321, Z = 111.111}; var serializedoubleClass = JsonConvert.SerializeObject(doubleClass); var floatClass = JsonConvert.DeserializeObject(serializedoubleClass, typeof(FloatClass)); } 

最好的方法是Serialize对象并再次淡化它