首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Convert.ToX和X.Parse(...)哪个更好用?

Convert.ToX和X.Parse(...)哪个更好用?
EN

Stack Overflow用户
提问于 2011-05-12 22:19:48
回答 5查看 490关注 0票数 6

我正在使用反射来创建一些对象。我设置的值是从文件中读入的,因此它们本身就是字符串格式,我需要将它们转换为属性的数据类型。

我的问题是,使用Convert.ToX(...)方法和X.Parse(...)方法哪个更快/更好?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-12 22:31:02

所有接受string类型参数的Convert.ToX函数最终都会向下调用适当数据类型的Parse方法。

例如,Convert.ToInt32(string)看起来像这样:

代码语言:javascript
复制
public static int ToInt32(string value)
{
   if (value == null)
   {
      return 0;
   }
   return int.Parse(value, CultureInfo.CurrentCulture);
}

对于包括DecimalDateTime在内的所有其他数字转换方法也是如此。所以你使用哪一个是相当无关紧要的;结果(和速度)在任何一种情况下都是一样的。

实际上,唯一的区别是开头的if (value == null) guard子句。这是否方便取决于具体的用例。通常,如果您知道您有一个非空的string对象,那么您最好使用Parse。如果你不确定,ConvertToX是一个更安全的选择,它只需要较少的内联空检查代码。

票数 11
EN

Stack Overflow用户

发布于 2011-05-12 22:31:14

它们是完全一样的!Convert.ToX(String)方法实际调用X.Parse(String)方法。

票数 1
EN

Stack Overflow用户

发布于 2011-05-12 22:32:26

根据我在Reflector中看到的,Convert form string是一个围绕Parse的包装器。因此,使用解析器在性能上略胜一筹是理所当然的。

编辑:在科迪指出优化几乎不会造成任何不同之后,我在我的机器上进行了测试,实际上,在一个循环中解析一百万个inetger时,ParseConvert的执行时间是相同的。

EDIT2:给你yas4891,它实际上是你使用的代码,只做了很小的改动。

代码语言:javascript
复制
public static void Main()
        {
            int tRuns = 1000000;
            List<String> tList = new List<string>();
            for (int i = 0; i < tRuns; i++) tList.Add(i.ToString());
            Stopwatch s = new Stopwatch();
            s.Start();
            int tSum = 0;
            for (int i = tRuns - 1; i >= 0; i--) 
            {
                tSum += Convert.ToInt32(tList[i]);
            }
            s.Stop();
            Console.WriteLine("convert: " + s.ElapsedMilliseconds);

            Console.WriteLine("tSum:" + tSum); 

            s.Reset();
            s.Start();
            tSum = 0; 
            for (int i = tRuns - 1; i >= 0; i--) 
            { 
                tSum += Int32.Parse(tList[i]); 
            } 
            s.Stop();
            Console.WriteLine("parse: " + s.ElapsedMilliseconds);
            Console.WriteLine("tSum:" + tSum);
            Console.ReadKey();
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5979420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档