2016-04-19 8 views
2

のための変数を使用します時間(順番にクラス間のリンクを作成することができるようにする)私は他の言語については、この上のいくつかのスレッドを見つけたが、C#...</p> <p>について何も基本的には、私は必要なもの、それぞれ別の名前でクラスをインスタンス化することではないクラスのインスタンス名のC#

私の現在のコード:

foreach (DataRow dataRow in RoutingObjects.Rows) 
{ 
    NodeViewModel node = CreateNode(dataRow.ItemArray[1].ToString(), new Point(globalx, globaly), false, dataRow.ItemArray[0].ToString()); 
} 

これは、テーブル内のすべての行に対する新しいNodeViewModelを作成します。私が実際に必要とするのは、各NodeViewModelが異なる名前を持つことですが、これを行う方法はわかりません。

ループ内で単純なintを使用しようとしましたが、変数をクラスインスタンス名に追加できません。 (明らかに間違った)コードここにある:

int i = 0; 
foreach (DataRow dataRow in RoutingObjects.Rows) 
{ 
    NodeViewModel node+i = CreateNode(dataRow.ItemArray[1].ToString(), new Point(globalx, globaly), false, dataRow.ItemArray[0].ToString()); 
    i++; 
} 

私は違ったことをやってする必要があることをこの時点で考え出し、これはおそらくひどいアイデアだったが、私はいくつかのアドバイスが欲しいです!可能であれば、私は知りたいと思っています。そうでなければ、いくつかの選択肢は非常に役に立ちます=)

ありがとう!

答えて

7

あなたはコレクションを探していると思います。 List<NodeViewModel>を使用できます。

var nodelist = new List<NodeViewModel>(); 
foreach (DataRow dataRow in RoutingObjects.Rows) 
{ 
    NodeViewModel node = CreateNode(dataRow.ItemArray[1].ToString(), new Point(globalx, globaly), false, dataRow.ItemArray[0].ToString()); 
    nodelist.Add(node); 
} 

今、あなたは、たとえば、インデックスを経由して、リスト内のすべてのノードにアクセスすることができます。

NodeViewModel nvm = nodelist[0]; 
+0

ありがとうございました、それは私がまさに必要です! – omicronlyrae

0

ティムSchmelter右。 そして、もちろん、WOUは、よりエレガントなコードのためにLINQを使用することができます。

var nodelist = RoutingObjects.Rows.Select(dataRow=>CreateNode(dataRow.ItemArray[1].ToString(), new Point(globalx, globaly), false, dataRow.ItemArray[0].ToString()) 
+0

'RoutingObjects.Rows.Select'の代わりに' RoutingObjects.AsEnumerable()。Select'を使う必要があります。なぜなら['DataRowCollection'](https://msdn.microsoft.com/en-us/library/system.data .datarowcollection(v = vs.110).aspx)は 'IEnumerable 'を実装せず、 'IEnumerable'のみを実装しています。 –

関連する問題

 関連する問題