[英]Accessing a List property of an object
我有一个简单的类,我认为如果我添加一个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);
我收到一个错误。 你调用的对象是空的。
我在这里做错了什么想法。
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<>
实例。 创建它的正确位置是构造函数。 私人制定者通常是一个好主意,但不是必需的。
您必须初始化列表。 它仅被声明,不会自动初始化。
在构造函数中初始化它:
public MyClass()
{
MyList = new List<double>();
}
(顺便说一句,是符合命名规则,属性必须是帕斯卡-套管,不是骆驼套管......所以myList
应MyList
。)
您需要将列表初始化为某些内容 - 它未初始化,因此它为null
。
在类构造函数中,您可以:
public MyClass()
{
myList = new List<double>();
}
您需要首先初始化列表才能正常工作,而不是像下面那样添加项目
if ( newObject.myList==null)
newObject.myList= new List<double>();
newObject.myList.Add(x);
您必须创建列表的实例。 您可以向类的构造函数添加初始化:
public class MyClass
{
public double myProperty1;
public double myProperty2;
//etc
public List<double> myList {get; set;}
public MyClass(){
myList = new List<double>();
}
}
如果您不自己创建实例,则不能对像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; }
}
另一种方法是在构造函数中初始化隐式声明。 但我喜欢写自己的领域。
Yoy需要在使用之前初始化myList,可能在构造函数中。
public class MyClass
{
public MyClass()
{
myList = new List<double>();
}
public double myProperty1;
public double myProperty2;
//etc
public List<double> myList {get; set;}
}
您必须将List<double>
对象实例化为新对象。 没有istantiation它只是一个指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.