system.convert到自定义对象

时间:2010-01-04 04:22:58

标签: c# .net typeconverter xtragrid

我们有一个自定义数据类型对象“Money”,用于表示我们的应用程序中的货币值。目前我们正在尝试在网格组件中实现一些自定义格式,但是从System.Convert引发异常“InvalidCastException”。

例外的文字是;

System.InvalidCastException occurred
  Message="Invalid cast from 'System.Int32' to 'System.Money'."
  Source="mscorlib"
  StackTrace: at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
  InnerException:

请注意,我们的“Money”数据类型确实实现了IConvertible以及拥有自己的TypeConverter。

我们如何克服这个例外?

编辑:此问题与在绑定到我们的自定义数据类型“Money”的列上评估的DevExpress XtraGrid“格式条件”有关。 Money类型可以没有问题地绑定到列,它只在列上评估格式条件时引发InvalidCastException,即GridColumnValue> 0

1 个答案:

答案 0 :(得分:2)

听起来问题是这里的int,而int 不是可以转换为 Money,因为它对此一无所知(但Money 可能可转换为int)。

浏览代码(反射器),Convert.ChangeType

我有兴趣了解您正在使用的网格组件以及int的来源,因为通常您希望它主要处理来自/来自{{ {1}},通过与类型或属性关联的string(通过TypeConverter)。既然听起来你已经编写了自己的PropertyDescriptor.Converter,那么显示TypeConverter实现也是值得的。

外部网格使用情况,在常规C#中,您应该只需定义一个静态转换运算符(ConvertFrom / implicit)即可。