2012-12-13 214 views
0

我知道這裏的一些代碼不清楚。我仍然在試驗事情。我有三個問題,爲什麼在列表中添加字符串時會出現錯誤?如何將Class1中的列表傳遞給我的主類?並且在列表passArr中我的語法正確嗎?不知道我是否應該在passArr末尾添加括號。將列表傳遞給另一個類

class Class1 
{ 
    public static List<string> passArr 
    { 
     get; 
     set; 
    } 

    public static void passIt() 
    { 
     passArr.Add("A"); //Error: Object reference not set to an instance of an object 
    } 
} 

主類

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1.passIt(); 
     List<string> passArr1 = Class1.passArr; 
     foreach (string s in passArr1) 
     { 
      Console.WriteLine(s); 
     } 
     Console.ReadLine(); 
    } 
} 

回答

5

你永遠創建列表,所以passArr財產(這需要重命名的方式)總有null值。你需要這樣的東西:在某些時候

Class1.passArr = new List<string>(); 

。另一種方法是使它成爲一個只讀屬性,通過現場與初始化支持:

private static readonly List<string> passArr = new List<string>(); 
public static List<string> PassArr { get { return passArr; } } 

(這符合在情況下方面的命名慣例,但它仍然不是一個有意義的名字,當然)

+0

感謝您的快速答覆!我試着將列表 passArr1 = Class1.passArr更改爲您的答案,發生錯誤,表示Class1不包含'passArr1'的定義。 – Blackator

+3

你想Class1.PassArr,你的passArr現在是一個私人清單與一個getter – Sayse

+0

對不起,我改變了錯誤的代碼。但是,當我嘗試執行Jon Skeet的修復時,錯誤「對象引用未設置爲對象的實例」。仍然出現。 – Blackator

0

感謝Jon Skeet和Sayse的回答。現在我清楚地知道,真正的問題是我試圖在列表中添加一些東西(使用passIt方法),而不爲列表創建新的對象。

這是我的新代碼:

主類

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1 cs = new Class1(); 
     cs.passIt(); 
     foreach (string s in cs.passArr) 
     { 
      Console.WriteLine("Inside main: " + s); 
     } 
     Console.ReadLine(); 
    } 
} 

Class1的

class Class1 
{ 
    public List<string> passArr 
    { 
     get; 
     set; 
    } 

    public void passIt() 
    { 
     passArr = new List<string>(); 
     passArr.Add("A"); 
    } 
} 
+0

我意識到這是一個老問題。但對於初學者程序員,嘗試在構造函數中實例化列表:public class1(){passArr = new List (); }' – Machtyn