将类的对象转换为另一个对象
我有两个类几乎相同,除了存储在它们中的数据类型。 一个类包含所有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对象并再次淡化它