2

我有一个简单的类,我认为如果我添加一个列表属性来存储一些值,我可以使它更有用(我不想要一个数组,因为我不知道它会多长时间)

public class MyClass
{
public double myProperty1;
public double myProperty2;
//etc
public  List<double> myList {get; set;}


}

但是当我尝试访问此属性时,例如通过

if x >y

newObject.myList.Add(x);

我得到一个错误。你调用的对象是空的。

任何想法我在这里做错了什么。

4

8 回答 8

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<>实例。创建它的正确位置是在构造函数中。私人二传手通常是个好主意,但不是必需的。

于 2012-11-05T13:48:45.547 回答
1

您必须初始化列表。它只是声明的,不会自动初始化。

在构造函数中初始化它:

public MyClass()
{
    MyList = new List<double>();
}

(顺便说一句,为了符合命名约定,属性必须是 Pascal 大小写的,而不是 Camel 大小写的......所以myList应该是MyList。)

于 2012-11-05T13:47:14.003 回答
1

您需要将列表初始化为某些东西 - 它没有被初始化,因此它是null.

在类构造函数中,您可以执行以下操作:

public MyClass()
{
  myList = new List<double>();
}
于 2012-11-05T13:47:47.290 回答
1

您需要先初始化列表才能正常工作,然后添加如下所示的项目

if ( newObject.myList==null)
    newObject.myList= new List<double>();
newObject.myList.Add(x);
于 2012-11-05T13:47:50.327 回答
1

您必须创建列表的一个实例。您可以将初始化添加到类的构造函数:

public class MyClass
{
public double myProperty1;
public double myProperty2;
//etc
public  List<double> myList {get; set;}

public MyClass(){
   myList = new List<double>();
}

}
于 2012-11-05T13:48:21.847 回答
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; }    
}

另一种方法是在构造函数中初始化隐式声明。但我喜欢写自己的领域。

于 2012-11-05T13:49:11.100 回答
1

Yoy 需要在使用之前初始化 myList 才能在构造函数中使用。

public class MyClass
{

public MyClass()
{
    myList  = new List<double>();
}

public double myProperty1;
public double myProperty2;
//etc
public  List<double> myList {get; set;}   

}
于 2012-11-05T13:49:23.760 回答
0

您必须将该List<double>对象实例化为新对象。没有istantiation,它只是一个指针。

于 2012-11-05T13:48:42.453 回答