代码之家  ›  专栏  ›  技术社区  ›  Nick

.NET分析与转换

  •  13
  • Nick  · 技术社区  · 16 年前

    在.NET中,可以使用 <datatype>.parse Convert.To<DataType> .

    我不熟悉解析和转换的基本原理,所以当被问到哪一个更好/更快/更合适时,我总是很困惑。

    那么-在什么情况下哪种方式最好?

    5 回复  |  直到 9 年前
        1
  •  15
  •   Keith    16 年前

    这个 Convert.ToXXX() 方法用于可能是正确或类似类型的对象,而 .Parse() .TryParse() 专门用于字符串:

    //o is actually a boxed int
    object o = 12345;
    
    //unboxes it
    int castVal = (int) 12345;
    
    //o is a boxed enum
    object o = MyEnum.ValueA;
    
    //this will get the underlying int of ValueA
    int convVal = Convert.ToInt32( o );
    
    //now we have a string
    string s = "12345";
    
    //this will throw an exception if s can't be parsed
    int parseVal = int.Parse( s );
    
    //alternatively:
    int tryVal;
    if( int.TryParse( s, out tryVal ) ) {
        //do something with tryVal 
    }
    

    如果您使用优化标志进行编译,那么Trparse非常快速——这是从字符串中获取数字的最佳方法。但是,如果有一个对象可能是int或字符串convert.toint32更快。

        2
  •  5
  •   TheSmurf    16 年前

    以下是您的答案:

    http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

    尽管我认为在.NET的现代版本中,最好的做法是在任何情况下使用胰蛋白酶,如果有任何疑问转换将起作用的话。

        3
  •  3
  •   saalon    16 年前

    我非常喜欢 TryParse ,因为当您要分析的值可能不是合适的类型时,它可以避免很多错误捕获的麻烦。

    我的订单通常是:

    • 解析(如果我能确定值是正确的类型,我会尽力确保这一点)
    • 台盼(如果我不能确定,当涉及用户输入时,或从您无法控制的系统输入时,都会发生这种情况)
    • convert(我认为自从我开始使用parse和typarse之后就没有使用过,但我可能是错的)
        4
  •  1
  •   Dillie-O    16 年前

    还有DirectCast方法,只有在确定对象的类型时才应使用该方法。它更快,但没有做任何正确的检查。当我知道每列的类型时,从松散类型的数据表中提取值时,我使用DirectCast。

        5
  •  1
  •   AlexCuse    16 年前

    如果你需要速度,我很肯定直接投球是最快的方法。也就是说,我通常使用.parse或.typarse,因为is似乎可以使事情更容易阅读,并以更可预测的方式运行。

    我相信,转换实际上是在引擎盖下解析的调用。所以没有什么区别,这似乎只是个人品味的问题。