C#正确的foreach语法迭代List

时间:2014-05-24 05:00:24

标签: c# list foreach

我一直在尝试使用foreach迭代List个对象,但似乎无法获得正确的语法。这是一个简化的例子。

    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);
    }*/
}

4 个答案:

答案 0 :(得分:3)

如果您尝试创建属性,则需要使用正确的语法,即错误告诉您的内容。如果您只是想创建一个方法,则需要将括号放在声明的末尾。试试这个

public void getall()
{

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

答案 1 :(得分:2)

报告的编译器错误是由于缺少括号,因此是一个无效的(或未解析为)方法声明。

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

(还有其他问题,例如&#34; ..不包含&#39; X&#39;&#34;的定义。)

答案 2 :(得分:0)

myFoofoo的列表,因此您可以循环搜索列表中的foo个对象。尝试:foreach(foo fooItem in myFoo){...}

答案 3 :(得分: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对象。