除了存储在其中的数据类型之外,我有两个几乎相等的类。一个类包含所有double值,而other包含所有浮点值。
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对象的方法,填充所有值并返回它。还有其他有效的方法吗?
答案 0 :(得分:20)
使用转换运算符:
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;
答案 1 :(得分:3)
您可以使用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;
答案 2 :(得分:3)
听起来你可以在这里使用泛型:
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>();
答案 3 :(得分:2)
您可以添加implicit type conversion operator:
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;
答案 4 :(得分:1)
为这些扩展方法添加一个类:
declare @searchText nvarchar(50) = 'fname@example.com'
select *
from Discussion
where
Comments = @searchText
or (
CHARINDEX(@searchText, Comments) > 0
and SUBSTRING(Comments, CHARINDEX(@searchText, Comments) - 1, 1) in (' ', '<', '>', '"', '''', ',', ';', '=', '(', ')', '*')
and SUBSTRING(Comments, CHARINDEX(@searchText, Comments) + LEN(@searchText), 1) in (' ', '<', '>', '"', '''', ',', ';', '=', '(', ')', '*'))
使用:
public static class ExtensionMethods
{
public static T ToObject<T>(this Object fromObject)
{
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(fromObject));
}
public static List<T> ToObjectList<T>(this Object fromObject)
{
return JsonConvert.DeserializeObject<List<T>>(JsonConvert.SerializeObject(fromObject));
}
}
答案 5 :(得分:0)
最佳转换方式
public static class Extention {
public static string ConvertObjectToJson(this object ob)
{
return JsonConvert.SerializeObject(ob);
}
}
使用情况
var doubleClass = new DoubleClass {
x = 10,
y = 20
};
var floatClass = JsonConvert.DeserializeObject<FloatClass>(doubleClass.ConvertObjectToJson());
答案 6 :(得分:-1)
最简单的方法是使用序列化程序。使用最有效的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));
}
答案 7 :(得分:-3)
最好的方法是Serialize对象并再次将其淡化