C# Parse和Convert的区别分析

原文:C# Parse和Convert的区别分析

     大家都知道在进行类型转换的时候有连个方法供我们使用就是Convert.to和*.Parse,但是疑问就是什么时候用C 什么时候用P 

     通俗的解释大家都知道: 

     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 

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

View Code

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

1  public static int ToInt32(string value, IFormatProvider provider)
2   {
3      if (value == null)
4       {
5          return 0;
6      }
7      return int.Parse(value, NumberStyles.Integer,    NumberFormatInfo.GetInstance(provider));
8  }

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

时间: 2024-11-03 04:08:59

C# Parse和Convert的区别分析的相关文章

link中convert.toint32 int.parse int.tryparse的区别和利弊

问题描述 link中convert.toint32 int.parse int.tryparse的区别和利弊 link中convert.toint32 int.parse int.tryparse的区别和利弊各式什么? 解决方案 convert.toint32在LINQ中是桩函数,桩函数会被linq provider识别并且转换成sql,而parse/tryparse不是.所以不要使用后者. 解决方案二: 是 .Net/LINK 吧. tryparse 返回成功/失败不抛出错误,用在明确要检查能

在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别

在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别?     int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 System.Int32.     (int)表示使用显式强制转换,是一种类型转换.当我们从 int 类型到 long.float.double 或decimal 类型,可以使用隐式转换,但是当我们从 long 类型到 int  类型转换就需要使用显式强制转换,否则会产生编译错误.     I

Int32.Parse()、Convert.toInt32()、Int32.TryParse()

int32.parse().convert.toint32().int32.tryparse()     int 关键字表示一种整型,是32位的,它的 .net framework 类型为 system.int32. int32.tryparse()不抛异常,会返回true或false来说明解析是否成功,如果解析错误,调用方将会得到0值.     (int)表示使用显式强制转换,是一种类型转换.当我们从 int 类型到 long.float.double 或decimal 类型,可以使用隐式转换

JavaScript创建闭包的两种方式的优劣与区别分析

  这篇文章主要介绍了JavaScript创建闭包的两种方式的优劣与区别分析的相关资料,需要的朋友可以参考下 通常JavaScript创建闭包比较常用的有两种方式. 构造函数方式: ? 1 2 3 new function() { var 变量... } 内联执行方式: ? 1 2 3 (function() { var 变量... })(); 在JavaScript内部运行机制下他们有什么区别?用哪种方式创建比较好?它与其它方式创建的闭包相比有什么优势? 我是这样理解的: 区别: 第一个:子方

javascript中callee与caller的区别分析

  javascript中callee与caller的区别分析 有些小伙伴可能会问caller,callee 是什么?在javascript 中有什么样的作用?那么本篇会对于此做一些基本介绍.希望能够对大家理解javascript中的callee与caller有所帮助. callee callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数 首先我们来写个阶成函数: ? 1 2 3 4 5 6 7 function chen(x){ if (x<=1) { retur

U盘与移动硬盘的区别分析

  U盘与移动硬盘的区别分析            一.存储的原理不同. U盘是以半导体材料(芯片)作为存储单元,又叫固体存储器,没有机械部分. 移动硬盘则是以磁性介质作为存储器,有机械部分. 二.能耗不同. U盘没有机械部分,需要提供的能量相比小得多,一般不会超过 100mA,而移动硬盘耗能相对较大,有的时间一个USB口提供的电流不能很好的保证其正常运行,因此移动硬盘一般配的数据线都是可以查两个USB端口,甚至需要配置专门的电源.这也是有的移动硬盘不正常工作的主要原因. 三.体积不同. 这点也

C#命名空间与java包的区别分析

  C#命名空间与java包的区别分析         这篇文章主要介绍了C#命名空间与java包的区别,较为详细的分析了C#命名空间与java包的相同点与不同点,非常具有实用价值,需要的朋友可以参考下 本文实例分析了C#命名空间与java包的区别.分享给大家供大家参考.具体分析如下: 相同点: 1.都是为了重用性(reusebility)--软件工程中一个非常重要的目标. 2.C#里面的命名空间和java中的包都属于访问权限的控制机制. 不同点: 1.C#命名空间只是一种逻辑上的结构,它允许所

jquery中attr和prop的区别分析

 这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下     在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: • 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. • 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 上面的描述也许有点模糊,举几个例子就知道了.

apache伪静态配置与iis伪静态配置的区别分析对比

apache伪静态配置与iis伪静态配置的区别分析对比 /* 在web开发中,经常会碰以要把php教程,asp教程文件伪静态成htm或其它文件,下面我们要讲一下关于apache伪静态规则与iis中伪静态规则的一些不同的部份了.下面我们先来看看apache伪静态的配置方法. 实例,我们要把 pl.php教程?id=1 page.php?id=1 伪静态成html页面 d-1.html v-1.html <virtualhost 192.168.0.110:801>     serveradmin