幾件事情:
1)作爲爲y我們的實際問題,你有兩個選擇:
您可以遍歷Bar
字段(或屬性,如果將其更改爲某個屬性如下所述)在你的代碼:
Foo foo = new Foo();
foreach(Bar bar in foo.Bar)
{
...
}
或者你可以使Foo
實施IEnumerable<Bar>
(這是比較複雜):
public class Foo : IEnumerable<Bar>
{
.. your existing code goes here
public IEnumerator<Bar> GetEnumerator()
{
return Bar.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return Bar.GetEnumerator();
}
}
這將允許你這樣做:
Foo foo = new Foo();
foreach(Bar bar in foo)
{
}
就我個人而言,我會推薦第一個選項。這很簡單,除非Foo
真的是(而不是它只是有)Bar
對象的集合,那麼它似乎更直觀。
2.)你有什麼不是屬性,它們是公共領域。的屬性有一個getter和一個setter,看起來是這樣的:
public class Foo
{
public string Something
{
get { return ...; }
set { ... = value; }
}
}
屬性通常對單個變量進行操作,稱爲後備存儲。對於上述物業,是這樣的:
public class Foo
{
private string something;
public string Something
{
get
{
return something;
}
set
{
something = value;
}
}
}
嚴格地說,你可以把的是,在get
塊返回的字符串編碼絕對任何塊,你可以在set
塊放任何東西(包括什麼,雖然這不是一個好主意)。
屬性允許您定義行爲類似於字段的東西(因爲您可以使用等號進行分配),但使用您在檢索或設置值時指定的行爲。然而,其中一個非常簡單的屬性(只是直接獲取/設置一個沒有任何其他邏輯的支持變量)的問題是它對於實際的功能有點冗長。這就是爲什麼C#3.0中引入自動屬性,這看起來是這樣的概念:
public class Foo
{
public string Something { get; set; }
}
這裏,Something
看起來有點像一個領域,但它實際上是一個屬性。 C#編譯器識別此語法(用分號替代get
和set
的代碼塊),併爲您創建一個支持變量,並插入代碼以從中讀取並寫入該代碼。
'List'* already * implement'IEnumerable'。你爲什麼認爲你需要自己實現它? –
2010-10-18 17:22:53
您是否在討論迭代「Bar」列表?或者你在說什麼迭代每個「酒吧」的成員?你已經迭代了一個List對象。 –
2010-10-18 17:23:34
你能發佈不能編譯的代碼嗎?下面有很多答案,但不知何故,我不認爲這些描述了你的問題。 – 2010-10-18 17:23:43