我们有一个自定义数据类型对象“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。
我们如何克服这个异常?
编辑:此问题与 DevExpress XtraGrid“格式条件”有关,该格式条件在绑定(bind)到我们的自定义数据类型“货币”的列上进行评估。 Money 类型可以毫无问题地绑定(bind)到列,它只会在列上评估格式条件时引发 InvalidCastException,即 GridColumnValue > 0
最佳答案
听起来问题是这里的值是int
,而int
不是可转换的到 Money
,因为它对此一无所知(但 Money
可能 可转换为 整数
).
浏览代码(反射器),没有明显的方式表明 Convert.ChangeType
永远 会喜欢这种用法。
我很想知道您使用的是什么网格组件,以及 int
来自哪里,因为通常您希望它主要处理/来自 string
,通过与类型或属性关联的 TypeConverter
(通过 PropertyDescriptor.Converter
)。由于听起来您已经编写了自己的 TypeConverter
,因此也值得展示 ConvertFrom
实现。
在 网格用法之外,在常规 C# 中,您应该能够简单地通过定义静态转换运算符(implicit
/explicit
).
关于c# - system.convert 到自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997487/