13

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

我不熟悉 parse 与 convert 的基础知识,所以当被问及哪个更好/更快/更合适时,我总是不知所措。

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

4

5 回答 5

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

于 2008-08-20T18:28:41.983 回答
5

这里给你一个答案:

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

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

于 2008-08-20T18:11:09.857 回答
3

我是TryParse的忠实粉丝,因为当您要解析的值可能不是适当的类型时,它可以为您省去很多关于错误捕获的麻烦。

我的订单通常是:

  • 解析(如果我可以确定该值将是正确的类型,并且我会尝试确保这一点)
  • TryParse(如果我不能确定,只要涉及用户输入或来自您无法控制的系统的输入,就会发生这种情况)
  • 转换(我想我自从开始使用 Parse 和 TryParse 以来就没有使用过,但我可能是错的)
于 2008-08-20T18:30:46.253 回答
1

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

于 2008-08-20T18:12:54.300 回答
1

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

我相信,Convert 实际上会在后台调用 Parse。所以那里几乎没有区别,这似乎只是个人品味的问题。

于 2008-08-20T18:12:58.590 回答