在.Net中,您可以使用.parse或Convert.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。