3

我们有一个自定义数据类型对象“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

4

1 回答 1

2

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

浏览代码(反射器),没有明显的方法Convert.ChangeType喜欢这种用法。

我很想知道您正在使用什么网格组件,以及int它来自哪里,因为通常string您会期望它主要通过TypeConverter与类型或属性关联(通过PropertyDescriptor.Converter)来处理 to/from 。由于听起来您已经编写了自己的TypeConverter,因此也值得展示ConvertFrom实现。

在网格使用之外,在常规 C# 中,您应该能够简单地通过定义静态转换运算符 ( implicit/ explicit) 来做到这一点。

于 2010-01-04T05:11:24.627 回答