【问题标题】:Convert Decimal to Object将十进制转换为对象
【发布时间】:2009-12-30 22:09:35
【问题描述】:

如何将 Decimal 数据类型转换为 Object 并仍然遵守 IConvertable 接口 ToType() 方法。这是使用 Convert.ChangeType 转换自定义数据类型(基于 Decimal)的初步工作。

编辑:我们想转换为对象,以便我们可以支持 IConvertible 的 ToType 方法。此方法返回类型对象。这样做的原因是用于根据属性类型填充类对象属性的方法中。

【问题讨论】:

    标签: c# changetype


    【解决方案1】:

    我认为您不能将其转换为 object 引用并保留界面。

    但您可以将其转换为 IConvertable 引用并使用它。这只是拳击的另一种形式。

    所以重点是:你到底为什么要把它转换成一个对象?

    另外,你可以按照这样的路线走:

    Decimal d = 10;
    object x = d;
    
    if (x is IConvertible) 
    { 
        string s = (x as IConvertible).ToString();
    }
    

    【讨论】:

      【解决方案2】:

      不确定为什么要将其转换为对象。如果您想将它用作 IConvertable 并保持静态类型安全,只需使用 IConvertable 引用。一旦转换为对象,静态类型安全性就会丢失。

      然而,一个对象永远不会“丢失”它的类型信息。如果必须使用对象引用,可以使用 as 关键字获取对 IConvertable 的引用。如果转换成功,它将返回一个有效的引用,如果对象没有实现接口,它将返回 null。

      object num = new Decimal();
      // ... 
      IConvertable convertableNum = num as IConvertable;
      if (convertableNum != null){
         // Do something meaningful ... 
      }
      

      【讨论】:

        【解决方案3】:

        与其他人一样,您为什么要转换还不清楚,但 C# 中的所有内容默认情况下都是最顶层的对象。因此,如果您需要将它传递给一个函数/方法来处理期望“对象”数据类型的处理,您可以只对其进行类型转换,然后在需要时将其重新转换回十进制..

        CallYourFunction((object)YourDecimalClass);

        然后,在你的功能中

        if( ParameterObject 是 YourDecimalClassType ) // 做点什么...

        【讨论】:

          猜你喜欢
          • 2011-10-14
          • 2022-06-22
          • 1970-01-01
          • 2011-07-28
          • 1970-01-01
          • 2011-10-07
          • 2017-07-31
          相关资源
          最近更新 更多