Foreach问题
答
如果您尝试以编程方式访问变量名称,则需要使用反射。
答
你可以做这样的事情:
foreach (int item in itemcount)
{
Controls[string.Format("label{0}", item.Id)].Text = item.ToString();
}
另外,如果你需要访问你需要投左侧表达Label类标签类的属性。
答
关闭我的头顶,答案是否定的。由于您无法访问foreach循环正在使用的迭代器。
而是做这样的事情
IList<Label> labels = new ArrayList<Label>();
for(int i = 0;i<labels.count;i++)
{
labels[i].text = i.toString();
}
答
是 “标签” 的阵列?然后,你应该这样做:
label[item] = item.ToString();
如果标签不是一个数组,也许你应该使用数组,而不是使用像label0,LABEL1变量名,...它会比使用反射容易得多。
答
foreach (int item in itemcount)
{
label[label.IndexOf(item)].Text = item.ToString()
}
如果我需要假设“标签”是标签(列表/ IList的)的列表,你的索引用[]访问,并列出有一个方法的IndexOf接受在一个给定的现有对象整个列表,返回“项目”的指标 - 在列表中 - ,因为你可以在MSDN检查:
- http://msdn.microsoft.com/en-us/library/5y536ey6.aspx(IList接口,见方法部分)。
答
就扔的答案,取决于itemcount
类型的缘故,你可以写:
Array.ForEach(itemcount, item => label[Convert.ToInt32(item)].Text = item.ToString());
如果itemcount
是object[]
,或
itemcount.ForEach(item => label[Convert.ToInt32(item)].Text = item.ToString());
如果itemcount
是List<object>
。
答
虽然之前发布的代码如严格意义上的回答这个问题,但似乎真的很糟糕的设计沿着这条路走下去。
根据您的需要,以及您使用的是什么框架,使用其他技术会更好。控制阵列是一种选择;如果您使用的是WPF,那么可以使用列表将其元素可视化为标签,从而可以非常优雅地实现此目的(您应该可以免费获得该元素,但如果不是,则更改控件的ItemTemplate会很微不足道 - 对不起,马上就有任何例子)。
答
如果你的课是一个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;
}
}
你使用什么platfowm? Winforms? – gor 2011-02-02 14:26:16