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)
听起来你可以在这里使用泛型:
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)
您可以使用转换运算符来实现这一点。
例如:
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)
| 归档时间: |
|
| 查看次数: |
64464 次 |
| 最近记录: |