[英]Get type of null reference object for Object reference not set to an instance of an object
自從我開始編程以來,這個問題一直困擾着我,而不是“我的代碼為空”在哪里,而是特別有沒有辦法從異常中獲取為空的對象的類型?
失敗了,誰能提供一篇博客文章或msdn文章來解釋.NET Framework不提供(或不提供)這些詳細信息的原因?
嗯...因為它為空。
在C#中,引用類型是指向某物的指針。 空指針不指向任何東西。 您在問,“如果指向某事物,它將指向哪種類型的事物”。 這就像拿一張白紙,然后問:“如果上面寫着什么,這會怎么說呢?”
更新:如果框架不知道空指針的類型,就不能知道它應該是什么類型? 好吧,可能吧。 再說一次,可能不會。 考慮:
MyClass myobj = null;
int hash = myobj.GetHashCode();
除非您在MyClass中覆蓋它,否則GetHashCode是在System.Object中定義的。 您是否應該抱怨myobj必須是System.Object? 現在,當我們檢查自己時,我們完全可以自由指定所需的類型。
SomeFunc(MyClass myparam)
{
if (myparam == null)
throw new ArgumentNullException("myparam must be a MyClass object");
}
但是現在我們正在談論應用程序代碼,而不是CLR代碼。 這使您成為“真正的”問題,“人們為什么不寫更多翔實的異常消息?”,正如我們在此處所說的那樣,這是“ 主觀和爭論 ”
因此,您基本上希望系統級異常知道僅在應用程序級才知道的類型信息,因此我們需要通過這種方式進行通信。 就像是:
SomeFunc(MyClass myparam)
{
if (myparam == null)
throw new ArgumentNullException("myparam", typeof(MyClass));
}
但這並不能真正為我們買很多東西,如果您真的想要,可以自己編寫:
public class MyArgumentNullException : ArgumentNullException
{
public MyArgumentNullException(string name, Type type)
:base(name + "must be a " + type.Name + " object");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.