欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
性能: TryParse比Parse好

TryParse比Parse好

如果注意觀(guān)察除string外的所有基元類(lèi)型,會(huì )發(fā)現它們都有兩個(gè)將字符串轉型為本身的方法:Parse和TryParse。以類(lèi)型double為例,這兩個(gè)方法最簡(jiǎn)單的原型為:

  1. 1.public static double Parse(string s)  
  2. 2.public static bool TryParse(string s, out double result) 

兩者最大的區別是,如果字符串格式不滿(mǎn)足轉換的要求,Parse方法將會(huì )引發(fā)一個(gè)異常;TryParse方法則不會(huì )引發(fā)異常,它會(huì )返回false,同時(shí)將result置為0。

實(shí)際上,早期的FCL中并沒(méi)有提供TryParse方法,那時(shí)只能調用Parse方法,如果轉型失敗,則要將值設定為一個(gè)初始值,同時(shí)必須要捕獲異常,代碼如下所示:

  1. string str = null;  
  2. double d;  
  3. try  
  4. {  
  5.     d = Double.Parse(str);  
  6. }  
  7. catch (Exception ex)  
  8. {  
  9.     d = 0;  

要注意,引發(fā)異常這個(gè)過(guò)程會(huì )對性能造成損耗(第5章會(huì )詳細解釋這一點(diǎn))。微軟的開(kāi)發(fā)團隊正是注意到這一點(diǎn),所以從.NET 2.0開(kāi)始,FCL中開(kāi)始為基元類(lèi)型提供TryParse方法。我們不妨來(lái)做個(gè)實(shí)驗,代碼如下所示:

  1. double re;  
  2. long ticks;  
  3.  
  4. Stopwatch sw = Stopwatch.StartNew();  
  5. for (int i = 1; i < 1000; i++)  
  6. {  
  7.     try  
  8.     {  
  9.         re = double.Parse("123");  
  10.     }  
  11.     catch  
  12.     {  
  13.         re = 0;  
  14.     }  
  15. }  
  16. sw.Stop();  
  17. ticks = sw.ElapsedTicks;  
  18. Console.WriteLine("double.Parse() 成功,{0} ticks", ticks);  
  19.  
  20. sw = Stopwatch.StartNew();  
  21. for (int i = 1; i < 1000; i++)  
  22. {  
  23.     if (double.TryParse("123", out re) == false)  
  24.     {  
  25.         re = 0;  
  26.     }  
  27. }  
  28. sw.Stop();  
  29. ticks = sw.ElapsedTicks;  
  30. Console.WriteLine("double.TryParse() 成功,{0} ticks", ticks);  
  31.  
  32. sw = Stopwatch.StartNew();  
  33. for (int i = 1; i < 1000; i++)  
  34. {  
  35.     try  
  36.     {  
  37.         re = double.Parse("aaa");  
  38.     }  
  39.     catch  
  40.     {  
  41.         re = 0;  
  42.     }  
  43. }  
  44. sw.Stop();  
  45. ticks = sw.ElapsedTicks;  
  46. Console.WriteLine("double.Parse() 失敗,{0} ticks", ticks);  
  47.  
  48. sw = Stopwatch.StartNew();  
  49. for (int i = 1; i < 1000; i++)  
  50. {  
  51.     if (double.TryParse("aaa", out re) == false)  
  52.     {  
  53.         re = 0;  
  54.     }  
  55. }  
  56. sw.Stop();  
  57. ticks = sw.ElapsedTicks;  
  58. Console.WriteLine("double.TryParse() 失敗,{0} ticks", ticks); 

以上這段代碼的輸出為:

  1. double.Parse() 成功,6661 ticks  
  2. double.TryParse() 成功,2886 ticks  
  3. double.Parse() 失敗,2062347 ticks  
  4. double.TryParse() 失敗,3379 ticks 

可見(jiàn), Parse和TryParse方法如果執行成功,它們的效率在一個(gè)數量級上,甚至在本示例中(在一個(gè)循環(huán)內),TryParse所帶來(lái)的效率比Parse還要高一些。但若執行失敗,Parse的執行效率相比于TryParse就太低了。

我們將提供TryParse方法的這種行為叫做類(lèi)型提供TryParse模式。TryParse模式為類(lèi)型提供兩個(gè)方法,假設第一個(gè)方法聲明為Do,第二個(gè)方法則聲明為T(mén)ryDo。Do方法在執行過(guò)程中如果發(fā)生錯誤則引發(fā)異常,而TryDo方法會(huì )返回一個(gè)boolean值,方法執行失敗返回false。如果要從TryDo中獲取實(shí)際的返回值,則應該為方法提供out參數。

不過(guò),我們并不建議為所有的類(lèi)型都提供TryParse模式,只有在考慮到Do方法會(huì )帶來(lái)明顯的性能損耗時(shí),才建議使用TryParse。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
圖像特征檢測(Image Feature Detection)
C# Parse and TryParse 方法詳解
C#-強制類(lèi)型轉換的三種方式
Net高級技術(shù)——IDisposable
Convert.ToInt32(),Int.Parse(),Int.TryParse()的區別
解一元二次方程的解
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久