题
在 .Net 中,您可以使用以下任一方法将字符串值读入另一种数据类型: <datatype>.parse
或者 Convert.To<DataType>
.
我不熟悉解析与转换的基础知识,因此当被问及哪一个更好/更快/更合适时,我总是不知所措。
那么 - 在什么类型的情况下哪种方式最好?
解决方案
这 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(如果我不能确定,每当涉及用户输入或来自您无法控制的系统的输入时都会发生这种情况)
- Convert (我想自从我开始使用 Parse 和 TryParse 以来我就没有使用过它,但我可能是错的)
还有 DirectCast 方法,仅当您确定对象的类型是什么时才应使用该方法。它更快,但不做任何适当的检查。当我知道每列的类型时,当我从松散类型的 DataTable 中提取值时,我会使用 DirectCast。
如果您需要速度,我很确定直接转换是最快的方法。话虽这么说,我通常使用 .Parse 或 .TryParse 因为这似乎使事情更容易阅读,并且以更可预测的方式运行。
我相信 Convert 实际上在底层调用了 Parse。因此,两者之间几乎没有什么区别,这似乎只是个人品味的问题。