我有一个简单的类,我认为如果我添加一个list属性来存储一些值(我不想要一个数组bc,我不知道它将会有多长时间),我认为它可以更有用。
public class MyClass
{
public double myProperty1;
public double myProperty2;
//etc
public List<double> myList {get; set;}
}
但是当我尝试访问此属性时,例如
if x >y
newObject.myList.Add(x);
我收到错误。对象引用未设置为对象的实例。
任何想法我在这里做错了什么。
答案 0 :(得分:4)
public class MyClass
{
public double myProperty1;
public double myProperty2;
//etc
public List<double> myList {get; private set;} // private set
public MyClass() // constructor
{
myList = new List<double>(); // create the list
}
}
您的类实例需要一个实际的List<>
实例。创建它的正确位置是构造函数。私人制定者通常是一个好主意,但不是必需的。
答案 1 :(得分:1)
您必须初始化列表。它仅被声明,不会自动初始化。
在构造函数中初始化它:
public MyClass()
{
MyList = new List<double>();
}
(顺便说一句,为了符合命名惯例,属性必须是Pascal-cased,而不是Camel-cased ...所以myList
应该是MyList
。)
答案 2 :(得分:1)
您需要将列表初始化为某些内容 - 它未初始化,因此它是null
。
在类构造函数中,您可以这样做:
public MyClass()
{
myList = new List<double>();
}
答案 3 :(得分:1)
首先需要初始化列表才能正常工作,而不是像下面那样添加项目
if ( newObject.myList==null)
newObject.myList= new List<double>();
newObject.myList.Add(x);
答案 4 :(得分:1)
您必须创建列表的实例。您可以向类的构造函数添加初始化:
public class MyClass
{
public double myProperty1;
public double myProperty2;
//etc
public List<double> myList {get; set;}
public MyClass(){
myList = new List<double>();
}
}
答案 5 :(得分:1)
如果您不自己创建实例,则不能对像List这样的对象使用隐式属性。
// Implicit declaration, a field is created in background, but the object isn't initialized.
public List<double> myList {get; set;}
相反:
// Explicit declaration, with me creating an instance
private List<double> myList = new List<double>();
public List<double> MyList
{
get { return myList; }
}
另一种方法是在构造函数中初始化隐式声明。但我喜欢写自己的领域。
答案 6 :(得分:1)
在使用构建函数之前,需要初始化List。
public class MyClass
{
public MyClass()
{
myList = new List<double>();
}
public double myProperty1;
public double myProperty2;
//etc
public List<double> myList {get; set;}
}
答案 7 :(得分:0)
您必须将List<double>
对象实例化为新对象。没有说明,它只是一个指针。