2017-11-15 20 views
1

2次元配列を作成しようとしていますが、コンストラクタで値を渡すことができないようです。パラメータを持つ2次元配列

例えば

public class MyObj 
{ 
    public string State {get; private set;} 
    public MyObj(string s) 
    { 
     this.State = s; 
    } 
} 

、別のクラスの

private MyObj[,] Obj; 
private void Setup() 
{ 
    this.Obj = new MyObj[5,5]; 
} 

私はthis.Objを見直すときの状態の値は常にnullです。私はなぜそれが作成された後に配列の各項目をループせずにStateプロパティを設定して(private setを取り除いて)私が他のオプションを持っているかわからないのは分かりますか?

私は構文が間違っている知っているけれども、あなたがnewで、参照オブジェクトの配列を作成すると、

this.Obj = new MyObj("default text for each item in array")[5,5,] 
のようなもの
+0

、なぜクラス自身にそれを置きますか? 'public MyObj(string s){State = string.IsNullOrEmpty(s)?}のようなものです。 "デフォルト値":s;} '? – Kolichikov

答えて

3

、各要素はnullのデフォルト値に設定されています。あなたがネストされたループを使用して手動で配列を埋めるために必要があるように、デフォルトの要素を渡すために何の構文は、ありません:配列を作成するとき

private void Setup() { 
    this.Obj = new MyObj[5,5]; 
    int rows = codes.GetLength(0); 
    int cols = codes.GetLength(1); 
    for (var r = 0; r != rows ; r++) { 
     for (var c = 0 ; c != cols ; c++) { 
      Obj[r,c] = new MyObj("default text for each item in array"); 
     } 
    } 
} 
1

、あなただけの可能性のあるオブジェクトのためのスペースを割り当てています。これらのスペースに実際にオブジェクトを割り当てているわけではありません。配列をnew MyObj[5,5]と定義すると、すべてのヌルで構成される5x5配列になります。配列の各メンバーを初期化する必要があります。この初期設定中に、デフォルト値を割り当てることができます。

また、インライン初期化構文を使用することもできます。このmyobjは、デフォルト値を持つ場合

var a = new MyObj[,]{ {new MyObj('default'), new MyObj('default2') ...}, {...} ...}