在.Net中,您可以使用<datatype>.parse
或Convert.To<DataType>
将字符串值读入另一种数据类型。
我不熟悉解析与转换的基本原理,所以当被问到哪一个更好/更快/更合适时,我总是不知所措。
那么 - 在哪种情况下哪种方式最好?
答案 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的忠实粉丝,因为当您要解析的值有可能不合适时,它可以为您节省很多错误。
我的订单通常是:
答案 3 :(得分:1)
还有DirectCast方法,只有在确定对象的类型时才应使用它。它更快,但没有做任何适当的检查。当我知道每列的类型时,我从松散类型的DataTable中提取值时使用DirectCast。
答案 4 :(得分:1)
如果你需要速度,我很确定直接演员是最快的方式。话虽这么说,我通常使用.Parse或.TryParse,因为它似乎使事情更容易阅读,并以更可预测的方式表现。
转换实际上是在引擎盖下调用Parse,我相信。因此,那里几乎没有什么区别,而且它似乎只是个人品味的问题。