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