2016-04-19 34 views
2

我發現了幾個線程在此對其他語言,但沒有爲C#...使用一個變量的類實例名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'。 –

相關問題