我有这个foreach循环,我正在尝试浏览Table类的documentTables列表,其中包含包含Row类对象的Table对象。目前我收到一个错误说:foreach语句不能对变量类型test1.Table进行操作,因为它不包含GetEnumerator的公共定义。我不完全理解发生了什么,不知道什么是实现接口的最佳方式。
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
artifact sourceJar {
classifier "sources"
}
}
}
}
TABLE CLASS(行类几乎相同,有很少的字符串和构造函数):
for (int i = 0; i < documentTables.Count(); i++)
{
foreach (Row r in documentTables[i])
{
// some functionality here
}
}
答案 0 :(得分:1)
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/foreach-in
foreach语句为每个语句重复一组嵌入式语句 数组中的元素或实现的数组 IEnumerable或IEnumerable界面。
所以你的 Table 类需要实现 IEnumerable :
class Table: IEnumerable
{
public Row a;
public Row b;
public Row c;
public Table(Row _a, Row _b, Row _c)
{
a = _a;
b = _b;
c = _c;
}
public IEnumerator GetEnumerator()
{
yield return a;
yield return b;
yield return c;
}
}
public class Row { }
然后你可以这样做:
var myTable = new Table(new Row(), new Row(), new Row());
foreach (var row in myTable)
{
// some functionality here
}
您的Table类的另一种可能的实现(我认为更灵活)如下:
class Table: IEnumerable
{
private Row[] _rows;
public Table(params Row[] rows)
{
this._rows = rows;
}
public IEnumerator GetEnumerator()
{
foreach (var row in _rows)
{
yield return row;
}
}
}
现在构造函数中的行数不限于三个。