4 回答

TA貢獻2021條經驗 獲得超8個贊
通常,包括例外在內,您應該將擴展方法視為普通的靜態(tài)方法。在這種情況下,您應該拋出ArgumentNullException。
由于一些原因,在此處拋出NullReferenceException是一個壞主意
實際上沒有發(fā)生空引用,因此看到一個是違反直覺的
拋出NullReferenceException并導致NullReferenceException發(fā)生會產生明顯不同的異常(一種觀察差異的方法是錯誤代碼)。對于CLR拋出的許多異常,這都是正確的。
請參閱何時可以捕獲StackOverflowException(我在該主題上發(fā)表的文章)。
像對待常規(guī)方法一樣調用擴展方法是完全合法的。在那種情況下,除了NullReferenceException外,我當然不會,而是ArgumentNullException。

TA貢獻1784條經驗 獲得超8個贊
除了所有其他答案(很好)之外,我認為值得一看的是Microsoft為保持一致性所做的事情……據我所知,Enumerable中的擴展方法都拋出ArgumentNullException。

TA貢獻1817條經驗 獲得超14個贊
由于擴展方法可以在C#2.0中使用,并且可以像靜態(tài)方法一樣調用它們(您不必將它們用作擴展方法),因此應使用ArgumentNullException。
僅僅因為它們看起來像類型上的方法并不意味著它們就是它們,或者總是被稱為一個。

TA貢獻1111條經驗 獲得超0個贊
ArgumentNullException。有沒有需要調用擴展方法,好像它們是實例方法。您可以像調用普通方法一樣調用它們。在這種情況下,NullReferenceException將完全不正確。
- 4 回答
- 0 關注
- 576 瀏覽
添加回答
舉報