2012-12-13 58 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