0

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

2 回答 2

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的命名约定,但它仍然不是一个有意义的名称,当然。)

于 2012-12-13T08:30:34.790 回答
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();
    }
}

第一类

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

    public void passIt()
    {
        passArr = new List<string>();
        passArr.Add("A");
    }
}
于 2012-12-13T09:11:08.470 回答