将List传递给另一个类

时间:2012-12-13 08:28:44

标签: c# list

我知道这里的一些代码不清楚。我还在尝试尝试一些事情。我有三个问题,为什么在我的列表中添加字符串时会出现错误?如何将Class1中的List传递给我的主类?我的语法在List 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();
    }
}

2 个答案:

答案 0 :(得分: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; } }

(这符合 case 方面的命名约定,但当然它仍然不是一个有意义的名称。)

答案 1 :(得分: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");
    }
}