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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

來自擴展方法的ArgumentNullException還是NullReference

來自擴展方法的ArgumentNullException還是NullReference

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

4 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

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


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


實際上沒有發(fā)生空引用,因此看到一個是違反直覺的

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

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


像對待常規(guī)方法一樣調用擴展方法是完全合法的。在那種情況下,除了NullReferenceException外,我當然不會,而是ArgumentNullException。


查看完整回答
反對 回復 2019-10-30
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

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


查看完整回答
反對 回復 2019-10-30
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

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


僅僅因為它們看起來像類型上的方法并不意味著它們就是它們,或者總是被稱為一個。


查看完整回答
反對 回復 2019-10-30
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

ArgumentNullException。有沒有需要調用擴展方法,好像它們是實例方法。您可以像調用普通方法一樣調用它們。在這種情況下,NullReferenceException將完全不正確。


查看完整回答
反對 回復 2019-10-30
  • 4 回答
  • 0 關注
  • 576 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號