簡體   English   中英

c#中列表的null異常

[英]null exception with lists in c#

嘿我正在嘗試使用C#中的通用列表,並且由於某種原因在為列表分配內存后,我得到unhandeledNullException。

 //edit

我發現我的問題是什么,我沒有使用當前的屬性。 如果我們說GeoInfo是我班級的私人成員,我該如何做它的屬性,我試過:

 private List<GeoInfo> GEOINFOS { get; set; } // edit i forgot to change it back 
// but i want to have my geoinfos private and my properties public

在此先感謝您的幫助

如果您希望私有財產,請使用

private List<GeoInfo> GEOINFOS { get; set; }

但是,沒有太多理由將auto屬性用於私有成員變量(並且不要忘記初始化該列表)。 如果您希望驗證正常,但您只是將該屬性用作私有變量。

您的空引用問題可能來自未初始化基礎屬性變量。 這不會自動完成,所以

public MyClass()
{
    GEOINFOS = new List<GeoInfo>();
}

還有一件事:對於C#,你對一個屬性的命名召集是奇怪的。 如何保持一致並唱GeoInfos?

您已將屬性設為私有。 如果您希望他們公開嘗試:

public List<GeoInfo> GeoInfos { get; set; }

本地存儲在對象中的自動實現的值將是私有的; 但是這些物業本身是公開的。

因為你宣稱有什么屬性訪問者。

如果您想顯式地編寫所有內容,則可以使用3.0之前的舊版本

private List<GeoInfo> geoInfos = new List<GeoInfo>;
public List<GeoInfo> GeoInfos {
  get { return geoInfos; }
  set { geoInfos = value; }
}

這仍然依賴於geoInfos在某處初始化 (如構造函數) - 或者nullPointerException將返回。

您可以在getter中對此進行延遲評估:

private List<GeoInfo> geoInfos = new List<GeoInfo>;
public List<GeoInfo> GeoInfos {
  get { if (geoInfos == null) {
          geoInfos = new List<GeoInfo>;
        } 
        return geoInfos; 
      }
  set { geoInfos = value; }
}

這確保您不必在構造函數中指定調用,並且您不必擔心在獲取元素之前明確設置元素的執行順序。

但是如果使用自動生成的屬性,則必須在某個時刻顯式設置引用。 如其他地方所建議的,最好的選擇是構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM