2011-02-02 89 views
1

我正在尝试使用foreach语句。我希望能够做到这样的事情:Foreach问题

​​

其中{0}是在项目中的数字。

这可能吗?

+0

你使用什么platfowm? Winforms? – gor 2011-02-02 14:26:16

回答

0

如果您尝试以编程方式访问变量名称,则需要使用反射。

5

你可以做这样的事情:

foreach (int item in itemcount) 
{ 
    Controls[string.Format("label{0}", item.Id)].Text = item.ToString(); 
} 

另外,如果你需要访问你需要投左侧表达Label类标签类的属性。

0

关闭我的头顶,答案是否定的。由于您无法访问foreach循环正在使用的迭代器。

而是做这样的事情

IList<Label> labels = new ArrayList<Label>(); 
for(int i = 0;i<labels.count;i++) 
{ 
    labels[i].text = i.toString(); 
} 
0

是 “标签” 的阵列?然后,你应该这样做:

label[item] = item.ToString(); 

如果标签不是一个数组,也许你应该使用数组,而不是使用像label0,LABEL1变量名,...它会比使用反射容易得多。

0
foreach (int item in itemcount) 
    { 
    label[label.IndexOf(item)].Text = item.ToString() 
    } 

如果我需要假设“标签”是标签(列表/ IList的)的列表,你的索引用[]访问,并列出有一个方法的IndexOf接受在一个给定的现有对象整个列表,返回“项目”的指标 - 在列表中 - ,因为你可以在MSDN检查:

0

就扔的答案,取决于itemcount类型的缘故,你可以写:

Array.ForEach(itemcount, item => label[Convert.ToInt32(item)].Text = item.ToString()); 

如果itemcountobject[],或

itemcount.ForEach(item => label[Convert.ToInt32(item)].Text = item.ToString()); 

如果itemcountList<object>

0

虽然之前发布的代码如严格意义上的回答这个问题,但似乎真的很糟糕的设计沿着这条路走下去。

根据您的需要,以及您使用的是什么框架,使用其他技术会更好。控制阵列是一种选择;如果您使用的是WPF,那么可以使用列表将其元素可视化为标签,从而可以非常优雅地实现此目的(您应该可以免费获得该元素,但如果不是,则更改控件的ItemTemplate会很微不足道 - 对不起,马上就有任何例子)。

1

如果你的课是一个ASP。NET页面,那么你应该可以找到它FindControl

foreach (int item in itemcount) 
{ 
    string name = string.Format("label{0}", item); 
    Label label = FindControl(name) as Label; 
    if (label != null) 
    { 
     label.Text = name; 
    } 
}