Я пытаюсь использовать 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);
}*/
}
Если вы пытаетесь создать Свойство, вам нужно будет использовать соответствующий синтаксис, это то, о чем говорит вам ошибка. Если вы просто хотите создать метод, вам нужно будет скопировать скобки в конце объявления. Попробуйте это вместо этого
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 ".)
Как и ответы выше в отношении скобок, вам также нужно будет отметить следующее.
Попробуйте что-то вроде этого в методе для устранения следующих ошибок:
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
.
bar
(ужасное название). В любом случае, сообщаемая ошибка не является ошибкой типа или исключением времени выполнения (возможно, оно сообщается неправильно, но приводите случай).
myFoo
- это список foo
поэтому вы можете myFoo
его, захватив объекты foo
из списка. Попробуйте: foreach(foo fooItem in myFoo){...}
myFoo
- этоList
типаfoo
неbar
. Это может привести к ошибке.