.Net解析与转换


13

在.Net中,您可以使用<datatype>.parseConvert.To<DataType>将字符串值读入另一种数据类型。

我并不熟悉解析和转换的基本原理,所以当被问及哪一个更好/更快/更合适时,我总是处于亏损状态。

那么 - 在哪种情况下哪种方式最好?

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更快。


5

这里是为你找出答案:

http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

虽然我觉得在.NET的现代版本,做的最好的事情是在任何情况下使用的TryParse,如果有任何疑问,转换将工作。


1

还有DirectCast方法,只有在您确定该对象的类型时才应使用该方法。它速度更快,但没有做适当的检查。当我知道每列的类型时,我从松散类型的DataTable中提取值时使用DirectCast。


1

如果你需要速度,我敢肯定直接投射是最快的方法。这就是说,我通常使用.Parse或.TryParse,因为它似乎使事情变得更容易阅读,并且以更可预测的方式行事。

转换实际上是调用解析引擎盖,我相信。所以这里几乎没有什么区别,而且它似乎只是个人品味的问题。


3

我是TryParse的忠实粉丝,因为它可以为您节省很多头痛的错误捕捉,当有可能您要分析的值不是合适的类型。

我的订单通常是:

  • 解析(如果我可以肯定的值将是正确的类型,我也尽力确保本)
  • 的TryParse(如果我不能肯定,这恰好每当用户输入的参与,或从系统输入你无法控制)
  • 转换(我认为自从我开始使用解析和的TryParse我没有使用过,但我可能是错的)