2014-05-24 32 views
1

我一直試圖使用foreach遍歷對象的List,似乎無法得到正確的語法。這是一個簡單的例子。C#正確的foreach語法迭代列表

class foo 
    { 
     private int x = 1; 
     public foo(int y) 
     { 
      x = y; 
     } 

     public int X 
     { 
      get { return x; } 
     } 
    } 

    class bar 
    { 
     foo footest = new foo(3); 
     private List<foo> myfoo = new List<foo>(); 
     public bar() 
     { 
      for (int i = 0; i < 3; i++) 
      { 

       myfoo.Add(footest); 
      } 
     } 
    /*Below is what I can't seem to get working. I want to write a method 
    that iterates through the list of foo objects and displays a property for 
    each one. The compiler gives an error under foreach that says "A get or 
set accessor expected." 
     /*public void getall 
    { 
     foreach (bar Myfoo in myfoo) //error under foreach 
    { 
     Console.Write(Myfoo.X); 
    }*/ 
} 
+0

'foreach(var myfoo in myfoo)'? – Uriil

回答

3

如果您正試圖創建一個屬性,你需要使用正確的語法,那是錯誤告訴你的。如果你只是想創建一個方法,你需要在括號的末尾加上括號。試試這個代替

public void getall() 
{ 

    foreach (foo Myfoo in myfoo) //error under foreach 
    { 
     Console.Write(Myfoo.X); 
    } 
} 
0

myFoofoo所以你會遍歷它抓住從列表中foo對象的列表。請嘗試:foreach(foo fooItem in myFoo){...}

+0

這並沒有解釋:編譯器在foreach下提供了一個錯誤,提示「A get或 set訪問器的預期。」 – user2864740

0

除了上面關於括號的回答,還需要注意以下幾點。

嘗試這樣的方法來解決下一個錯誤:

foreach (var f in myfoo) 
{ 
    // do something with the 'f' here 
} 

foreach (foo f in myfoo) 
{ 
    // do something with the 'f' here 
} 

在您發佈的代碼,你試圖用不正確的類型與迭代。 myfoo類型爲List<foo>,因此包含一列foo對象。當您遍歷此列表時,您需要在列表中使用相同類型的對象,因此在這種情況下,需要使用foo對象。

+0

他OP有'bar'(糟糕的名字)。在任何情況下,報告的錯誤都不是類型錯誤或運行時異常(可能是錯誤地報告,但是需要報告)。 – user2864740

2

編譯器錯誤報告是由於到失蹤括號,因此是無效的(或者,不解析爲)一個方法聲明。

public void getall() // every method declaration must have parenthesis 
{ 
    foreach (bar Myfoo in myfoo) { 
     Console.Write(Myfoo.X); 
    } 
} 

(也有其他的問題,如「..不包含‘X’的定義」。)

+0

'myFoo'是'foo'類型的'List'而不是'bar'。這會引發錯誤。 – Ballbin

+0

@Ballbin這是正確的。我只是提供*報告*問題的更正;問題是一蹴而就的。 (希望OP在解決這個分析錯誤後應該繼續他/她自己的故障排除。) – user2864740