Преобразование объекта класса в другой
у меня есть два класса, которые почти равны, за исключением типов данных, хранящихся в них. Один класс содержит все значения double, а другой-все значения 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, заполняет все значения и возвращает его. Есть ли другой эффективный способ сделать это.
6 ответов
Используйте оператор преобразования:
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;
}
а затем просто использовать его:
var convertedObject = (FloatClass) doubleObject;
редактировать
Я изменил оператор на explicit
вместо implicit
так как я использовал FloatClass
приведите пример. Я предпочитаю использовать explicit
над implicit
поэтому он заставляет меня подтвердить, какой тип объекта будет преобразован в (для меня это означает меньше ошибок отвлечения + читаемость).
implicit
преобразование, а затем вам просто нужно будет сделать:
var convertedObject = doubleObject;
можно использовать Операторы Преобразования для достижения этой цели.
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;
Похоже, вы можете использовать дженерики здесь:
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>();
вы можете добавить неявный оператор преобразования типа:
public class DoubleClass
{
public double X;
public double Y;
public double Z;
public static implicit operator FloatClass(DoubleClass d)
{
return new FloatClass { X = (float)d.X, Y = (float)d.Y, Z = (float)d.Z };
}
}
теперь это работает:
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));
}