2011-02-02 56 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; 
    } 
}