如何将字符串转换为自定义类型,以便DataGridView可以写入该类型的对象?

时间:2015-02-20 18:38:53

标签: c# datagridview implicit-conversion

一位同事开发了一套类来管理各种类型的测量,以便在运行时指定测量单位(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类让我这样做会更清晰。

非常感谢。

0 个答案:

没有答案