4 回答

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。

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
除了所有其他答案(很好)之外,我認(rèn)為值得一看的是Microsoft為保持一致性所做的事情……據(jù)我所知,Enumerable中的擴(kuò)展方法都拋出ArgumentNullException。

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è)。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
ArgumentNullException。有沒(méi)有需要調(diào)用擴(kuò)展方法,好像它們是實(shí)例方法。您可以像調(diào)用普通方法一樣調(diào)用它們。在這種情況下,NullReferenceException將完全不正確。
- 4 回答
- 0 關(guān)注
- 571 瀏覽
添加回答
舉報(bào)