2

我正在開發一個MVC 4 C#互聯網應用程序。ArgumentNullException使用列表

我有一個MapLocationCompany類以及一個MapLocation類。我在每個MapLocationCompany對象後面都有一個MapLocation對象列表。

這裏是我當前的代碼:

public class MapLocationCompany 
{ 
    public List<MapLocation> MapLocationList { get; set; } 
} 

我已經在數據庫中創建一個MapLocationCompany後,我想MapLocation對象添加到這個MapLocationCompany。

在任何MapLocation項目添加到MapLocationCompany之前,我要求MapLocationList。

這裏是我的代碼:

public IEnumerable<MapLocation> getMapLocationsForCompany(int id) 
{ 
    MapLocationCompany mapLocationCompany = getMapLocationCompany(id); 
    return mapLocationCompany.MapLocationList.ToList(); 
} 

我收到此錯誤:

System.ArgumentNullException was unhandled by user code 
Value cannot be null 

回答

2

添加內部列表的初始化在類的構造函數

public class MapLocationCompany 
{ 
    [Key] 
    public int id { get; set; } 
    [HiddenInputAttribute] 
    public string UserName { get; set; } 
    public string CompanyName { get; set; } 
    public double MapStartupLatitude { get; set; } 
    public double MapStartupLongitude { get; set; } 
    public int MapInitialZoomIn { get; set; } 
    public List<MapLocation> MapLocationList { get; set; } 

    public void MapLocationCompany() 
    { 
     MapLocationList = new List<MapLocation>(); 
    } 
} 

我們無法看到getMapLocationCompany(id);中的代碼是什麼,但我認爲它以某種方式創建了一個類MapLocationCompany並返回此實例。但是在默認情況下,這個新實例的屬性MapLocationList設置爲null,因此,如果您嘗試使用該屬性(.ToList()),您將得到一個空引用異常。將上面的代碼添加到構造函數有助於避免此問題。列表仍然是空的,你需要填充它,但保持列表的內部變量已經初始化,你可以使用它來添加新的元素。

作爲最後一個提示,錯誤是由您對ToList()的引用引起的,但MapLocationList已被定義爲List,因此您可以將其刪除。

0

請在調用ToList()方法之前檢查NULL。下面是修改後的代碼

public IEnumerable<MapLocation> getMapLocationsForCompany(int id) 
{ 
    MapLocationCompany mapLocationCompany = getMapLocationCompany(id); 
    if(mapLocationCompany.MapLocationList == null) 
    { 
     mapLocationCompany.MapLocationList = new List<MapLocation>(); 
    } 

    return mapLocationCompany.MapLocationList; 
} 
+0

你的回答是正確的,但如果你遵循這種方法,那麼你(程序員)應該記得每次需要MapLocationCompany實例時都要初始化列表。構造函數就在這裏。當一個對象被構造時,它應該準備好工作,並且應該沒有未定義的狀態來修復 – Steve

+1

@Steve:我同意你的關注,我只是提供了一種避免空引用異常的方法。 – Manju