2012-01-02 4 views
9
public class OrderItem 
{ 
    public string ProductName { get; private set; } 
    public decimal LatestPrice { get; private set; } 
    public int Quantity { get; private set; } 
    public decimal TotalOrder { get {return LatestPrice * Quantity;}} 

    public OrderItem(string name, decimal price, int quantity) 
    { 

    } 

    public OrderItem(string name, decimal price) : this(name, price, 1) 
    { 

    } 
} 

위의 클래스는 일부 배경에 해당합니다.C# 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 목록 내에서 클래스 인스턴스화?

public void AddProduct(string name, decimal price, int quantity) 
{ 
    lstOrderitem.Add(new OrderItem(name, price, quantity));   
} 

코드에서 AddProduct 메서드 내에서 제목에 오류가 표시됩니다.

클래스를 인스턴스화하고 양식 프로그램의 목록 상자에 표시되도록 컬렉션에 추가하려고합니다. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다 -

은 "AddProduct은"

오류 = NullReferenceException이이 버튼을 클릭 이벤트에서 호출됩니다.

내가이 클래스의 새로운 인스턴스를 만들 때 이후로 생각했기 때문에 아무도이 클래스가 참조 할 수있는 목록을 추가하는 동안 그 이유를 알고 있는지 궁금합니다. 문제가 무엇인지 아는 사람이 있으면 고맙습니다.

당신은 다음과 같이 생성자에서 lstOrderitem 속성을 초기화 할 필요가

public List<OrderItem> lstOrderitem{ get; private set; } 
    public int NumberOfProducts { get; private set; } 
    public decimal BasketTotal { get; private set; } 

    public ShoppingBasket() 
    { 
     //List<OrderItem> lstOrderitem = new List<OrderItem>(); 
    } 

    public void AddProduct(string name, decimal price, int quantity) 
    { 
     lstOrderitem.Add(new OrderItem(name, price, quantity)); 


    } 
+0

디버거를 사용하면 나중에 도움이 될 것입니다. –

+1

'// List lstOrderitem = new List ();'가 거의 틀림 :'/ List '부분을 제거하여 로컬 선언이 아닌 멤버 속성의 초기화로 만들어야합니다. – dasblinkenlight

+0

Ahh Okay이 모든 것을 시도해보고 나를 도와 주신 분들께 감사드립니다. – Taemint

답변

20

편집 :

public MyClass() { 
    lstOrderitem = new List<OrderItem>(); 
} 

P.S.

편집 소문자로 시작하는 멤버 변수와 혼동을 피하기 위해 대문자로 속성의 이름을 시작하는 것이 좋습니다.

+0

"lstOrderItem은 미안한 속성입니다.이 부분을 포함시켜야합니다. 이것을 보여주기 위해 편집했습니다. – Taemint

+0

@Taelmit :이 속성은 자동으로 제공되는 것으로, 응답과 같이 초기화해야합니다. – Tigran

+0

왜 컴파일러는 초기화되지 않은 인스턴스 속성을 사용할 때 불평하지 않습니다. – JayJay

3

lstOrderitem 참조를 초기화하지 않은 것 같습니다. 참조 값이 null 인 경우 코드를 디버그하십시오. 사용하기 전에 lstOrderitem을 초기화해야합니다.

+0

"lstOrderItem은 그 부분을 포함시켜야하는 미안한 속성입니다. 이것을 표시하도록 OP를 수정했습니다. – Taemint

0

레퍼런스를 초기화하지 않은 것 같습니다. lstOrderitem. 참조 값이 null이면 코드를 디버그하십시오. 사용하기 전에 lstOrderitem을 초기화해야합니다.

public MyClass() { 
    lstOrderitem = new List<OrderItem>(); 
} 
관련 문제