.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以来我就没有使用过,但是我可能错了)