【问题标题】:C# proper foreach syntax to iterate over ListC# 正确的 foreach 语法来迭代 List
【发布时间】:2014-05-24 05:00:24
【问题描述】:

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

【问题讨论】:

  • foreach(var Myfoo in myfoo) ?

标签: c# list foreach


【解决方案1】:

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

public void getall()
{

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

【讨论】:

    【解决方案2】:

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

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

    (还有其他问题,例如“..不包含'X'的定义”。)

    【讨论】:

    • myFooList 类型的 foo 不是 bar。这会引发错误。
    • @Ballbin 没错。我只是为报告的问题提供更正;问题是一次性的。 (并希望 OP 在解决此解析错误后继续他/她自己的故障排除。)
    【解决方案3】:

    myFoofoo 的列表,因此您可以循环遍历它,从列表中获取foo 对象。试试看:foreach(foo fooItem in myFoo){...}

    【讨论】:

    • 这没有解释:编译器在 foreach 下给出了一个错误,上面写着“A get or set accessor expected.”
    【解决方案4】:

    除了上面关于括号的答案外,您还需要注意以下几点。

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

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

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

    在您发布的代码中,您尝试使用不正确的类型进行迭代。 myfoo 属于 List&lt;foo&gt; 类型,因此包含 foo 对象列表。当你遍历这个列表时,你需要在列表中使用相同类型的对象,所以在本例中是一个foo 对象。

    【讨论】:

    • 他 OP 有 bar 类(可怕的名字)。无论如何,报告的错误都不是类型错误或运行时异常(可能是错误报告,但要证明)。
    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多