一位同事开发了一套类来管理各种类型的测量,以便在运行时指定测量单位(deg F,deg C或其他)。这些类有一个ToString()方法,它返回一个包含值和单位的字符串,例如“100 C”。
有一个类有几个这些类型的成员。出于这个问题的目的,让我们使用CSimUnitTemperature。该类具有双精度隐式转换运算符:
// Type Casting
public static implicit operator double(SimUnitTemperature T) { return T.Temperature; }
public static implicit operator SimUnitTemperature(double temp)
{
SimUnitTemperature T = new SimUnitTemperature();
T.Temperature = temp;
return T;
}
CSimRecipeSegment类有几个SimUnitTemperature类型的成员。我可以创建一个List对象,并将其用作DataGridView的数据源。但是当我尝试将显示为“100 C”的值更改为“110 C”时,我得到一条长的异常消息,以“从System.String'到'SimShopMeasures.SimUnitTemperature'的无效转换”开头。
所以,我试图提供一个从字符串到SimUnitTmeperature对象的隐式转换,使用我编写的一个小字符串扩展方法将字符串的第一段转换为double:
public static implicit operator string(SimUnitTemperature T)
{
return T.ToString();
}
public static implicit operator SimUnitTemperature(string tempString)
{
SimUnitTemperature T = new SimUnitTemperature();
T.Temperature = tempString.FirstValue();
return T;
}
但是当我尝试使用它时,我得到了同样的例外。当我尝试更改DataGridView中的值时,没有遇到这两种方法的断点。
我知道我可以将类型为double的公共属性添加到使用所有这些温度的类中,这可能就是我要做的,但我认为更改SimUnitTemperature类让我这样做会更清晰。
非常感谢。