使用列表的ArgumentNullException

时间:2014-02-08 09:45:44

标签: c# list asp.net-mvc-4 visual-studio-2012 argumentnullexception

我正在开发一个MVC 4 C#互联网应用程序。

我有一个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 个答案:

答案 0 :(得分: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()),则会得到Null Reference Exception。将上面的代码添加到构造函数有助于避免此问题。 List仍然是空的,您需要填充它,但保持列表的内部变量已初始化,您可以使用它来添加新元素。

作为最后一点,错误是由您对ToList()的引用引起的,但MapLocationList已经被定义为List,因此您可以删除它。

答案 1 :(得分: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;
}