【问题标题】:Passing a List to another class将列表传递给另一个类
【发布时间】:2012-12-13 17:11:08
【问题描述】:

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

【问题讨论】:

    标签: c# list


    【解决方案1】:

    您永远不会创建列表,因此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 的命名约定,但当然它仍然不是一个有意义的名称。)

    【讨论】:

    • 感谢您的快速回复!我尝试将我的 List passArr1 = Class1.passArr 更改为您的答案,发生错误,提示 Class1 不包含“passArr1”的定义。
    • 你想要 Class1.PassArr,你的 passArr 现在是一个带有 getter 的私有列表
    • 对不起,我改错了代码。但是,当我尝试实施 Jon Skeet 的修复时,出现错误“对象引用未设置为对象的实例”。仍然出现。
    • pastebin.com/aWhfu8UM我的代码有什么问题,如果你能帮忙的话。
    • @Si8:这不是网站的运作方式。如果您有其他问题,请单独发布。
    【解决方案2】:

    感谢 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");
        }
    }
    

    【讨论】:

    • 我意识到这是一个老问题。但对于初学者程序员,请尝试在构造函数中实例化列表:public Class1() { passArr = new List&lt;string&gt;(); }
    猜你喜欢
    • 2014-04-01
    • 1970-01-01
    • 2014-02-24
    • 2013-12-10
    • 2013-07-24
    • 2015-05-13
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多