.Net Parse与Convert

时间:2008-08-20 18:06:13

标签: .net parsing

在.Net中,您可以使用<datatype>.parseConvert.To<DataType>将字符串值读入另一种数据类型。

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

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

5 个答案:

答案 0 :(得分:15)

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更快。

答案 1 :(得分:5)

以下是给你的答案:

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

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

答案 2 :(得分:3)

我是TryParse的忠实粉丝,因为当您要解析的值有可能不合适时,它可以为您节省很多错误。

我的订单通常是:

  • Parse(如果我可以确定该值将是正确的类型,我确实尝试确保这一点)
  • TryParse(如果我不能确定,只要涉及用户输入,或者从您无法控制的系统输入,就会发生这种情况)
  • 转换(我认为自从我开始使用Parse和TryParse以来我没用过,但我可能错了)

答案 3 :(得分:1)

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

答案 4 :(得分:1)

如果你需要速度,我很确定直接演员是最快的方式。话虽这么说,我通常使用.Parse或.TryParse,因为它似乎使事情更容易阅读,并以更可预测的方式表现。

转换实际上是在引擎盖下调用Parse,我相信。因此,那里几乎没有什么区别,而且它似乎只是个人品味的问题。