.Net解析与转换
时间:2020-03-05 18:41:13 来源:igfitidea点击:
在.Net中,我们可以使用<datatype> .parse
或者Convert.To <DataType>
将字符串值读取为另一种数据类型。
我不熟悉解析与转换的基本原理,因此当被问到哪个更好/更快/更合适时,我总是很困惑。
那么哪种方式在哪种情况下最好呢?
解决方案
回答
这是给你的答案:
http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428
尽管我认为在.NET的现代版本中,最好的办法是在任何情况下都使用TryParse,如果有人怀疑转换是否有效。
回答
还有一个DirectCast方法,只有在确定对象的类型是什么时才应使用。它速度更快,但没有进行任何适当的检查。当我知道每个列的类型时,我将从松散类型的DataTable中提取值时使用DirectCast。
回答
如果我们需要速度,我敢肯定直接投射是最快的方法。话虽如此,我通常使用.Parse或者.TryParse,因为它似乎使事情更易于阅读,并且行为方式更可预测。
我相信,转换实际上是在后台调用Parse。因此,两者之间几乎没有区别,而且实际上似乎只是个人喜好问题。
回答
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会更快。
回答
我是TryParse的忠实拥护者,因为当我们要解析的值不是正确类型时,它使我们免于头疼的错误捕获。
我的订单通常是:
- 解析(如果我可以确定该值将是正确的类型,那么我会尽力确保这一点)
- TryParse(如果我不确定,只要涉及到用户输入或者无法控制的系统输入,就会发生这种情况)
- 转换(我认为自从我开始使用Parse和TryParse以来我就没有使用过,但是我可能错了)