我一直在尝试使用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);
}*/
}
答案 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)
myFoo
是foo
的列表,因此您可以循环搜索列表中的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
对象。