c#正确的foreach语法来遍历List

本文关键字:遍历 List 语法 foreach | 更新日期: 2023-09-27 18:05:08

我一直在尝试使用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);
    }*/
}

c#正确的foreach语法来遍历List

如果您试图创建一个属性,您将需要使用正确的语法,这就是错误告诉您的。如果你只是想创建一个方法,你需要在声明的末尾加上圆括号。试试这个

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

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

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

(还有其他问题,如"…不包含'X'的定义")

myFoofoo的列表,因此您将通过它循环从列表中抓取foo对象。Try: foreach(foo fooItem in myFoo){...}

除了上述关于括号的答案,您还需要注意以下内容:

在方法中尝试这样做来解决下一个错误:

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对象。