zoukankan      html  css  js  c++  java
  • decimal的三种赋值方式

     

    今天风痕在群里问了个问题:给如下这三种定义decimal类型的变量赋值有什么不同?

    using System; 

    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Decimal
    {
        class Program
        {
            static void Main(string[] args)
            {
                decimal dRebate1 = new decimal(1);
                decimal dRebate2 = Convert.ToDecimal(1);
                decimal dRebate3 = 1M;

                Console.WriteLine("dRebate1:{0}\ndRebate2:{1}\ndRebate3:{2}"
                     dRebate1.ToString(), dRebate2.ToString(), dRebate3.ToString());
                Console.ReadLine();
            }
        }
    }

    我感觉没有什么大的区别,仅仅是初始化值的来源方式不同而已,就好比吃饭可以用筷子或者勺子一样。现在就简单说说。 

    1.dRebate1 新实例初始化为指定的 32 位有符号整数值,因为C#编辑器知道它是值类型,所以在线程栈上分配这个整数值的实例,装的数值是1,其作用是初始化一个值。右键转到定义会看到程序集 mscorlib.dll中的元数据,发现在new decimal(1)中的1不能是string等字符类型,只能是如图下面的一些类型:

     

    2. dRebate2 这个是将指定的 32 位(也可以是16位)带符号整数的值转换为等效的十进制数,即decimal基本类型,它在这里就是将其它的基本类型转化成decimal类型,当然,可以是绝大部分的基本类型都可以通过Convert进行转换,可以点这里查看转换类型种类。

    3.dRebate3 ,这个就更加的明显了,在C#中,M或者m表示的就是这个值是decimal的基本类型,只要是这样定义的,就告诉C#编辑器,这个值是decimal类型的,以后就当这个类型的来用。当然,如果你写个string类型的"123"后面跟个M,那肯定是会报错的,F5不通过,因为编辑器不认识这是什么东东,即使"123"的老爸是李刚也不行。跟decimal基本类型M写法类似的有很多,float用F或者f,double用D或者d等等。

    最后,我用VS2010自带的工具 IL反汇编工具看了下有什么不同,其实因为本来值得来源展示方式不同,那生成的IL肯定也不同了。

     

    里面的IL关键字每种定义可以参看:《你必须知道的.NET》中的第三章,《CLR via C#》的第五章,这里就不多说 了。

    总结:我们定义类型的时候,要看具体场合,不要纠结谁好谁差,用对了场景,符合了习惯,那就是100% 的好。

  • 相关阅读:
    inkscape
    关于英语写作词源方面的。。
    ubuntu上配tensorflow
    腾讯面试指南
    使用traceview进行Android性能测试(转)
    Android CTS 测试总结【转】
    JAVA和C++区别
    接口继承
    vim实现全选功能
    C++异常机制的实现方式和开销分析
  • 原文地址:https://www.cnblogs.com/yinhe/p/2639125.html
Copyright © 2011-2022 走看看