关于解析:.Net解析与转换

关于解析:.Net解析与转换

.Net Parse versus Convert

在.Net中,您可以使用.parseConvert.To将字符串值读取为另一种数据类型。

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//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会更快。


这是给你的答案:

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

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


我是TryParse的忠实拥护者,因为当有可能要解析的值不是适当类型时,它使您免于头疼的错误捕获。

我的订单通常是:

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

如果您需要速度,我敢肯定直接投射是最快的方法。话虽如此,我通常使用.Parse或.TryParse,因为它似乎使事情更易于阅读,并且行为方式更可预测。

我相信,转换实际上是在后台调用Parse。因此,两者之间几乎没有区别,而且实际上似乎只是个人喜好问题。


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


推荐阅读