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

fhn*_*eer 16 .net c# type-conversion

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

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

class FloatClass
{
    float X;
    float Y;
    float Z;
}
Run Code Online (Sandbox Code Playgroud)

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

var doubleObject = new DoubleClass();

var convertedObject = (FloatClass)doubleObject; // TODO: This
Run Code Online (Sandbox Code Playgroud)

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

let*_*ves 24

使用转化运算符:

public static explicit operator FloatClass (DoubleClass c) {
   FloatCass fc = new FloatClass();
   fc.X = (float) c.X;
   fc.Y = (float) c.Y;
   fc.Z = (float) c.Z;
   return fc;
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

var convertedObject = (FloatClass) doubleObject;
Run Code Online (Sandbox Code Playgroud)

编辑

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

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

var convertedObject = doubleObject;
Run Code Online (Sandbox Code Playgroud)

参考


Dar*_*ren 6

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

 public class GenericClass<T>
 {
    T X { get; set; }
    T Y { get; set; }
    T Z { get; set; }
 }

 GenericClass<float> floatClass = new GenericClass<float>();
 GenericClass<double> doubleClass = new GenericClass<double>();
Run Code Online (Sandbox Code Playgroud)


Tig*_*ran 5

您可以使用转换运算符来实现这一点。

例如:

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;
Run Code Online (Sandbox Code Playgroud)