[英]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.