2016-04-19 35 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'。 –

相关问题