访问对象的List属性

时间:2012-11-05 13:45:55

标签: c# list

我有一个简单的类,我认为如果我添加一个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);

我收到错误。对象引用未设置为对象的实例。

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

8 个答案:

答案 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>对象实例化为新对象。没有说明,它只是一个指针。