|
TryParse比Parse好 如果注意觀察除string外的所有基元類型,會(huì)發(fā)現(xiàn)它們都有兩個(gè)將字符串轉(zhuǎn)型為本身的方法:Parse和TryParse。以類型double為例,這兩個(gè)方法最簡(jiǎn)單的原型為:
兩者最大的區(qū)別是,如果字符串格式不滿足轉(zhuǎn)換的要求,Parse方法將會(huì)引發(fā)一個(gè)異常;TryParse方法則不會(huì)引發(fā)異常,它會(huì)返回false,同時(shí)將result置為0。 實(shí)際上,早期的FCL中并沒(méi)有提供TryParse方法,那時(shí)只能調(diào)用Parse方法,如果轉(zhuǎn)型失敗,則要將值設(shè)定為一個(gè)初始值,同時(shí)必須要捕獲異常,代碼如下所示:
要注意,引發(fā)異常這個(gè)過(guò)程會(huì)對(duì)性能造成損耗(第5章會(huì)詳細(xì)解釋這一點(diǎn))。微軟的開(kāi)發(fā)團(tuán)隊(duì)正是注意到這一點(diǎn),所以從.NET 2.0開(kāi)始,F(xiàn)CL中開(kāi)始為基元類型提供TryParse方法。我們不妨來(lái)做個(gè)實(shí)驗(yàn),代碼如下所示:
以上這段代碼的輸出為:
可見(jiàn), Parse和TryParse方法如果執(zhí)行成功,它們的效率在一個(gè)數(shù)量級(jí)上,甚至在本示例中(在一個(gè)循環(huán)內(nèi)),TryParse所帶來(lái)的效率比Parse還要高一些。但若執(zhí)行失敗,Parse的執(zhí)行效率相比于TryParse就太低了。 我們將提供TryParse方法的這種行為叫做類型提供TryParse模式。TryParse模式為類型提供兩個(gè)方法,假設(shè)第一個(gè)方法聲明為Do,第二個(gè)方法則聲明為TryDo。Do方法在執(zhí)行過(guò)程中如果發(fā)生錯(cuò)誤則引發(fā)異常,而TryDo方法會(huì)返回一個(gè)boolean值,方法執(zhí)行失敗返回false。如果要從TryDo中獲取實(shí)際的返回值,則應(yīng)該為方法提供out參數(shù)。 不過(guò),我們并不建議為所有的類型都提供TryParse模式,只有在考慮到Do方法會(huì)帶來(lái)明顯的性能損耗時(shí),才建議使用TryParse。 |
|
|
來(lái)自: 悟靜 > 《.net和asp.net》