繁体   English   中英

访问对象的List属性

[英]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>();
}

(顺便说一句,是符合命名规则,属性必须是帕斯卡-套管,不是骆驼套管......所以myListMyList 。)

您需要将列表初始化为某些内容 - 它未初始化,因此它为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM