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

.Net解析与转换

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

    在。Net可以使用以下任一方法将字符串值读入另一种数据类型 <datatype>.parse Convert.To<DataType> .

    我不熟悉解析和转换的基本原理,所以当被问及哪种更好/更快/更合适时,我总是不知所措。

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

    5 回复  |  直到 10 年前
        1
  •  15
  •   Keith    17 年前

    这个 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 
    }
    

    如果你使用优化标志编译,TryParse非常快——这是从字符串中获取数字的最佳方式。但是,如果你有一个可能是int或字符串Convert的对象。ToInt32更快。

        2
  •  5
  •   TheSmurf    17 年前

    这里有一个答案:

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

    虽然我认为在现代版本中。NET,最好的办法是在任何情况下使用TryParse,如果对转换是否有效有任何疑问。

        3
  •  3
  •   saalon    17 年前

    我非常喜欢 TryParse ,因为当您要解析的值可能不属于适当的类型时,它为您节省了很多错误捕获的麻烦。

    我的订单通常是:

    • 解析(如果我能确定值是正确的类型,我会尽力确保这一点)
    • TryParse(如果我不能确定,每当涉及用户输入或来自您无法控制的系统的输入时,都会发生这种情况)
    • Convert(我想自从我开始使用Parse和TryParse以来,我就没有使用过它,但我可能错了)
        4
  •  1
  •   Dillie-O    17 年前

    还有DirectCast方法,只有当你确定对象的类型时,你才应该使用它。它更快,但不会进行任何适当的检查。当我知道每一列的类型时,当我从松散类型的DataTable中提取值时,我使用DirectCast。

        5
  •  1
  •   AlexCuse    17 年前

    如果你需要速度,我敢肯定直接投是最快的方法。话虽如此,我通常使用。解析或。TryParse因为它似乎使内容更容易阅读,并且行为更可预测。

    我相信,Convert实际上在幕后调用了Parse。所以两者之间几乎没有区别,这似乎只是个人品味的问题。

    推荐文章