2

リストプロパティを追加していくつかの値を保存すると、より便利になると思った単純なクラスがあります(配列bcは必要ありません。それがどれくらいの長さになるかわかりません)

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

自分でインスタンスを作成しないと、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

コンストラクターで使用する前に、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 に答える
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

リストを初期化する必要があります。宣言されるだけで、自動的に初期化されません。

コンストラクターで初期化します。

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

(ところで、命名規則に準拠するには、プロパティはキャメルケースではなくパスカルケースでなければなりません...そう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 に答える
0

List<double>オブジェクトを新しいオブジェクトとしてインスタンス化する必要があります。インスタンス化がなければ、それは単なるポインターです。

于 2012-11-05T13:48:42.453 に答える