C # правильный синтаксис foreach для перебора списка

1

Я пытаюсь использовать 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);
    }*/
}
Теги:
list
foreach

4 ответа

3
Лучший ответ

Если вы пытаетесь создать Свойство, вам нужно будет использовать соответствующий синтаксис, это то, о чем говорит вам ошибка. Если вы просто хотите создать метод, вам нужно будет скопировать скобки в конце объявления. Попробуйте это вместо этого

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 ".)

  • 0
    myFoo - это List типа foo не bar . Это может привести к ошибке.
  • 0
    @Ballbin Это правильно. Я только исправляю сообщенную проблему; вопросы одноразовые. (И, надеюсь, OP должен продолжить устранение неполадок после устранения этой ошибки синтаксического анализа.)
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
    У ОП есть классная bar (ужасное название). В любом случае, сообщаемая ошибка не является ошибкой типа или исключением времени выполнения (возможно, оно сообщается неправильно, но приводите случай).
0

myFoo - это список foo поэтому вы можете myFoo его, захватив объекты foo из списка. Попробуйте: foreach(foo fooItem in myFoo){...}

  • 0
    Это не объясняет: компилятор выдает ошибку в foreach, которая говорит: «Ожидается получение или установка доступа».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню