第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

來(lái)自擴(kuò)展方法的ArgumentNullException還是NullReference

來(lái)自擴(kuò)展方法的ArgumentNullException還是NullReference

HUH函數(shù) 2019-12-16 16:12:05
在空實(shí)例上調(diào)用擴(kuò)展方法時(shí)(擴(kuò)展方法不允許它),您認(rèn)為什么是拋出的最佳異常類(lèi)型?由于擴(kuò)展方法只不過(guò)是靜態(tài)方法,因此您可以辯稱(chēng)它應(yīng)該為ArgumentNullException,但另一方面,它們的使用類(lèi)似于實(shí)例方法,因此使用NullReferenceException可能更自然。讓我們來(lái)看下面的例子:public static string ToInvariantString(this IFormattable value, string format){    return value.ToString(format, CultureInfo.InvariantCulture);}如果value參數(shù)為null,則將引發(fā)NullReferenceException。另一個(gè)示例是:public static string ToInvariantString(this IFormattable value, string format){    if (value == null) throw new ArgumentNullException("value");    return value.ToString(format, CultureInfo.InvariantCulture);}編輯: 在一些答案中,您指出可以像靜態(tài)方法一樣調(diào)用擴(kuò)展方法,在這種情況下,空引用異常將是錯(cuò)誤的,這很重要,實(shí)際上是我關(guān)心的問(wèn)題之一,不確定為什么我首先忘記了這個(gè)問(wèn)題。有人還指出,拋出NullReferenceException是錯(cuò)誤的,是的。這就是為什么我不拋出它,而是通過(guò)不保護(hù)該方法而讓它發(fā)生(讓CLR拋出它)。我認(rèn)為我贊成ArgumentNullException(到目前為止,這是我一直使用的),但我仍然認(rèn)為至少存在爭(zhēng)辯反對(duì)NullReferenceException的空間,因?yàn)樵诖蠖鄶?shù)將使用該方法的地方,它似乎更自然。
查看完整描述

4 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

通常,包括例外在內(nèi),您應(yīng)該將擴(kuò)展方法視為普通的靜態(tài)方法。在這種情況下,您應(yīng)該拋出ArgumentNullException。


由于一些原因,在此處拋出NullReferenceException是一個(gè)壞主意


實(shí)際上沒(méi)有發(fā)生空引用,因此看到一個(gè)是違反直覺(jué)的

拋出NullReferenceException并導(dǎo)致NullReferenceException發(fā)生會(huì)產(chǎn)生明顯不同的異常(一種觀察差異的方法是錯(cuò)誤代碼)。對(duì)于CLR拋出的許多異常,這都是正確的。

請(qǐng)參閱何時(shí)可以捕獲StackOverflowException(我在該主題上發(fā)表的文章)。


像對(duì)待常規(guī)方法一樣調(diào)用擴(kuò)展方法是完全合法的。在那種情況下,除了NullReferenceException外,我當(dāng)然不會(huì),而是ArgumentNullException。



查看完整回答
反對(duì) 回復(fù) 2019-12-17
?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

除了所有其他答案(很好)之外,我認(rèn)為值得一看的是Microsoft為保持一致性所做的事情……據(jù)我所知,Enumerable中的擴(kuò)展方法都拋出ArgumentNullException。

查看完整回答
反對(duì) 回復(fù) 2019-12-17
?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

由于擴(kuò)展方法可以在C#2.0中使用,并且可以像靜態(tài)方法一樣調(diào)用它們(您不必將它們用作擴(kuò)展方法),因此應(yīng)使用ArgumentNullException。


僅僅因?yàn)樗鼈兛雌饋?lái)像類(lèi)型上的方法并不意味著它們就是它們,或者總是被稱(chēng)為一個(gè)。


查看完整回答
反對(duì) 回復(fù) 2019-12-17
?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

ArgumentNullException。有沒(méi)有需要調(diào)用擴(kuò)展方法,好像它們是實(shí)例方法。您可以像調(diào)用普通方法一樣調(diào)用它們。在這種情況下,NullReferenceException將完全不正確。

查看完整回答
反對(duì) 回復(fù) 2019-12-17
  • 4 回答
  • 0 關(guān)注
  • 571 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)