zoukankan      html  css  js  c++  java
  • Convert和int.Parse区别

    Convert 用来转换继承自object类型的类型(当然所有的类型都是继承自object的),但是一般Convert用来转化直接就是obejct的类型,如我们用datareader从数据库取出一个数据的时候就是object类型的,此时你若用int.parse(dr["id"]);肯定会报错的,所以必须使用Convert.toint32(dr["id"]);
         而Parse用来转换String类型的数据。
          其实我们看System这个基类就会发现,他的Convert类提供了几乎所有N型到N型的转化,就是Convert也只是string类型到int型的转化,只是parse没有提供针对object的转化罢了,可以说parse是N型(除了string类型,他不提供parse的转化,仅支持Convert到其他类型的转化)。都有的一个方法,而Convert提供了泛义上的转化。
          疑问来了,既然Convert提供了泛义的转化比如 string str="1234"; int32.parse(str);Convert.toint32(str);都可以达到相同的效果。哪么到底我们该用那一个,而那一个效果又会更好!
          来看system这个基类:
           以int到string类型的转换,不带格式的转换为例,当我们使用int32.parse(str)的时候,他其实是在调用mscorlib基类库的system类中的构造类型int32中的Parse方法。而这个方法调用了本构造中的一个重载(Overload)方法Parse。

    public static int Parse(string s)
    {
        return Parse(s, NumberStyles.Integer, null);
    }

    而重载的parse中采取调用system中只读函数Nunber

    public static int Parse(string s, NumberStyles style, IFormatProvider provider)
    {
        NumberFormatInfo instance = NumberFormatInfo.GetInstance(provider);
        NumberFormatInfo.ValidateParseStyle(style);
        return Number.ParseInt32(s, style, instance);
    }

    Nubmer中的PasreInt32会去执行转换。
          好,int的分析到此。看Convert的转换,
        当我们调用Convert.toint32这个方法的时候看看Convert类是怎么执行的!

    public static int ToInt32(string value, IFormatProvider provider)
    {
        if (value == null)
        {
            return 0;
        }
        return int.Parse(value, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
    }

        你会发现他直接就去找了int这个类的Parse方法。而这个方法直接去执行了int32中parse的那个重载的方法。可见殊途同归他们最后到要落到只读类Number身上去进行类型转换。性能差距在进行到Number之前就产生了!在parse中他会直接找到自身,而Convert转化string到什么类型最终都是落到该类型的parse身上,所以针对string类型的转换还是本身类型的parse效率更高一些。

  • 相关阅读:
    JS---案例:拖曳对话框
    关于选用ccflow你所担心的问题都在这里为您解答
    Elasticsearch(GEO)数据写入和空间检索
    echart的legend不显示问题
    html5+css3的神奇搭配
    h5+css3+Jq
    初探 jQuery
    在vi编辑器中如何向上翻页,向下翻页以及查询“ab”
    webpack4 特性
    webpack4配置
  • 原文地址:https://www.cnblogs.com/eason-chan/p/3639695.html
Copyright © 2011-2022 走看看