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 2

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. Добавление кода выше в конструктор помогает избежать этой проблемы. То Список по-прежнему пуст, и вам нужно заполнить его, но внутренняя переменная, которая хранит список, инициализирована, и вы можете использовать ее для добавления новых элементов.

В качестве заключительного замечания, ошибка вызвана вашей ссылкой на ToList (), но MapLocationList уже определен как список, так что вы можете удалить его.

Пожалуйста, проверьте значение NULL перед вызовом метода ToList (). Ниже приведен модифицированный код

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

   return mapLocationCompany.MapLocationList;
}