2

MVC 4 C# 인터넷 응용 프로그램을 개발 중입니다.목록을 사용하는 ArgumentNullException

MapLocation 클래스뿐 아니라 MapLocationCompany 클래스가 있습니다. 각 MapLocationCompany 객체 다음에 MapLocation 객체 목록이 있습니다.

나는 데이터베이스에 MapLocationCompany을 만든 후에
public class MapLocationCompany 
{ 
    public List<MapLocation> MapLocationList { get; set; } 
} 

, 나는이 MapLocationCompany에 MapLocation 객체를 추가 할 :

여기에 내 현재 코드입니다.

어떤 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())을 사용하려고하면 Null 참조 예외가 발생합니다. 위의 코드를 생성자에 추가하면이 문제를 피할 수 있습니다. 목록은 여전히 ​​비어 있으므로 채울 필요가 있지만 목록을 유지하는 내부 변수가 초기화되고이를 사용하여 새 요소를 추가 할 수 있습니다.

마지막으로 ToList()에 대한 참조로 인해 오류가 발생했지만 MapLocationList은 이미 목록으로 정의되어 있으므로 제거 할 수 있습니다.

0

ToList() 메소드를 호출하기 전에 NULL을 확인하십시오. 수정 된 코드는 다음과 같습니다

+0

귀하의 답변은 정확 합니다만이 방법을 사용하면 MapLocationCompany 인스턴스가 필요할 때마다 (프로그래머) 목록을 초기화해야합니다. 생성자는 여기에 있습니다. 개체가 생성 될 때 작업 할 준비가되어 있어야하며 수정해야 할 정의되지 않은 상태가 없어야합니다. – Steve

+1

@Steve : 걱정거리에 동의하며 방금 null 참조 예외를 피할 수있는 방법을 제공했습니다. – Manju