2012-11-05 35 views
2

我有一個簡單的類,我想我可以做更有用的,如果我添加一個列表屬性來存儲一些值(我不想要一個數組BCC我不知道它會多久)訪問一個對象的列表屬性

public class MyClass 
{ 
public double myProperty1; 
public double myProperty2; 
//etc 
public List<double> myList {get; set;} 


} 

但是當我試圖通過

if x >y 

newObject.myList.Add(x); 

訪問此屬性,例如我得到一個錯誤。你調用的對象是空的。

任何想法,我在做什麼錯在這裏。

回答

4
public class MyClass 
{ 

    public double myProperty1; 
    public double myProperty2; 
    //etc 
    public List<double> myList {get; private set;} // private set 

    public MyClass() // constructor 
    { 
      myList = new List<double>(); // create the list 
    } 
} 

您的類實例需要實際的List<>實例。創建它的正確位置是在構造函數中。私人二傳手通常是一個好主意,但不是必需的。

+0

完美。非常感謝。我想我需要初始化列表,但我不確定在哪裏。 – AbeeCrombie

1

您必須初始化列表。它僅被聲明,不會自動初始化。

在構造函數初始化:

public MyClass() 
{ 
    MyList = new List<double>(); 
} 

(順便說一句,是符合命名規則,屬性必須是帕斯卡 - 套管,不是駱駝套管......所以myList應該MyList

1

您需要將列表初始化爲某種內容 - 它未初始化,因此它是null

在類的構造函數,你可以這樣做:

public MyClass() 
{ 
    myList = new List<double>(); 
} 
1

你需要先初始化列表中正常工作,不是像如下

if (newObject.myList==null) 
    newObject.myList= new List<double>(); 
newObject.myList.Add(x); 
1

添加項目你必須創建一個實例的名單。您可以添加初始化類的構造函數:

public class MyClass 
{ 
public double myProperty1; 
public double myProperty2; 
//etc 
public List<double> myList {get; set;} 

public MyClass(){ 
    myList = new List<double>(); 
} 

} 
0

你必須實例化List<double>對象作爲新對象。如果沒有這種孤獨感,它只是一個指針。

1

如果您不自己創建實例,則不能使用類似List的對象的隱式屬性。

// Implicit declaration, a field is created in background, but the object isn't initialized. 
public List<double> myList {get; set;} 

相反:

// Explicit declaration, with me creating an instance 
private List<double> myList = new List<double>(); 

public List<double> MyList 
{ 
    get { return myList; }  
} 

另一種方法是初始化在構造函數的隱式聲明。但我喜歡寫自己的領域。

1

Yoy需要在使用之前初始化myList可能在構造函數中。

public class MyClass 
{ 

public MyClass() 
{ 
    myList = new List<double>(); 
} 

public double myProperty1; 
public double myProperty2; 
//etc 
public List<double> myList {get; set;} 

} 
+0

歡呼聲。對此,我真的非常感激! – AbeeCrombie