在 .Net 中,您可以使用<datatype>.parse
或将字符串值读入另一种数据类型Convert.To<DataType>
。
我不熟悉 parse 与 convert 的基础知识,所以当被问及哪个更好/更快/更合适时,我总是不知所措。
那么 - 在哪种情况下哪种方式最好?
这些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 会更快。
这里给你一个答案:
http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428
尽管我认为在现代版本的 .NET 中,最好的办法是在任何情况下使用 TryParse,如果对转换是否有效有任何疑问。
我是TryParse的忠实粉丝,因为当您要解析的值可能不是适当的类型时,它可以为您省去很多关于错误捕获的麻烦。
我的订单通常是:
还有 DirectCast 方法,只有在您确定对象的类型时才应使用该方法。它更快,但没有进行任何适当的检查。当我知道每列的类型时,我从松散类型的 DataTable 中提取值时使用 DirectCast。
如果您需要速度,我很确定直接施法是最快的方法。话虽如此,我通常使用 .Parse 或 .TryParse ,因为这似乎使事情更容易阅读,并且以更可预测的方式表现。
我相信,Convert 实际上会在后台调用 Parse。所以那里几乎没有区别,这似乎只是个人品味的问题。