[Convert和Parse到底哪個效率高]
大家都知道在进行类型转换的时候有兩个方法供我们使用就是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);}public static int Parse(string s, NumberStyles style, IFormatProvider provider){ NumberFormatInfo instance = NumberFormatInfo.GetInstance(provider); NumberFormatInfo.ValidateParseStyle(style); return Number.ParseInt32(s, style, instance);}public static int ToInt32(string value, IFormatProvider provider){ if (value == null) { return 0; } return int.Parse(value, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));}
Int32.TryParse 会把最终的解析工作代理给Number.TryParseInt32。
[解决办法]
作为开发人员不要井底蛙,否则即使对井底研究得再透彻,可能也是成事不足败事有余的,甚至基于这种所谓的“效率”的观点来否定别人基于对井上面的广阔应用的观点的决策。
有时间,你可以跳出井底的范畴,例如你可以亲自做测试,看看当你花几个小时把你的一个实际的商品化产品中的代码进行这种所谓的效率改进时其结果对客户来说到底值几毛钱?!你做测试,来判断到底差多少效率从、值不值得仅从这个技术角度来看问题,对于从事软件设计开发也许更有益处。