c# - system.convert 到自定义对象

标签 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。

我们如何克服这个异常?

编辑:此问题与 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/

相关文章:

c# - 如何在 python 中加载 C# dll?

.net - 适用于大量数据的最佳抽取算法有哪些?

c# - Visual Studio 2015 上缺少引用错误

C - 将 long int 转换为带符号的十六进制字符串

c# - 连通分量标记算法优化

c# - c# 中的 Microsoft Visual C++ 运行时库异常

c# - 对枚举类型名称的编辑未反射(reflect)在 VS2015 *.settings 文件 C# 中

c# - 如何在区域设置中显示 0 值的日期?

java - 防止 Int 将 012345 更改为 5349

c# - 获取类型的转换器