无法为 GetEnumerator 执行 Foreach

本文关键字:执行 Foreach GetEnumerator | 更新日期: 2023-09-27 17:57:01

当我声明foreach时,编译器显示以下错误:

foreach 语句不能对类型为"System.Data.DataTable"的变量进行操作,因为"System.Data.DataTable"不包含"GetEnumerator"的公共定义

这是代码:

leagueTable_link = item.Links.LeagueTable.href.ToString();
object leagueTable_object = load_League_Table(leagueTable_link);
foreach (var classifica in leagueTable_object)
{
}

这是由在线工具 Json2C# 创建的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class LeagueTable
{
    public string[] _links = new string[50]; 
    public int[] position = new int[50];
    public string[] teamName = new string[50];
    public int[] playedGames = new int[50];
    public int[] points = new int[50];
    public int[] goals = new int[50];
    public int[] goalsAgainst = new int[50];
    public int[] goalDifference = new int[50];
    public struct League_Struct
    {
        public string _links;
        public int position;
        public string teamName;
        public int playedGames;
        public int points;
        public int goals;
        public int goalsAgainst;
        public int goalDifference;
    }
    public League_Struct[] league_struct = new League_Struct[50];
    public class Links
    {
        public string self { get; set; }
        public string soccerseason { get; set; }
    }
    public class Team
    {
        public string href { get; set; }
    }
    public class Links2
    {
        public Team team { get; set; }
    }
    public class Standing
    {
        public Links2 _links { get; set; }
        public int position { get; set; }
        public string teamName { get; set; }
        public int playedGames { get; set; }
        public int points { get; set; }
        public int goals { get; set; }
        public int goalsAgainst { get; set; }
        public int goalDifference { get; set; }
    }
    public class RootObject
    {
        public  Links _links { get; set; }
        public string leagueCaption { get; set; }
        public int matchday { get; set; }
        public List<Standing> standing { get; set; }
    }
}

}

leagueTable_object包含以下内容:

var obj = JsonConvert.DeserializeObject<LeagueTable.RootObject>(responseText);

我该如何解决这个问题?我在网上看到不同的解决方案,但我不明白。我应该在我的 Json 类中实现 GetEnumerator 类吗?

无法为 GetEnumerator 执行 Foreach

leagueTable_object对象的类型似乎是"System.Data.DataTable",它不是可枚举的类型,因此您无法在此对象上循环。您可以做的是循环访问此数据表中的行:

leagueTable_link = item.Links.LeagueTable.href.ToString();
DataTable leagueTable_object = load_League_Table(leagueTable_link);
foreach (var classifica in leagueTable_object.Rows)
{
}

看起来leagueTable_object是DataTable的对象。如果它是一个列表,那么它将起作用。Foreach 可用于继承 IEnumerable 的类。您可以使用 leagueTable_object.Rows 而不是 foreach 中的leagueTable_object

如果你这里的对象是DataTable类型,那么这里的问题是你试图迭代一个DataTable对象,而你需要迭代它的行。因此,请尝试将foreach代码更改为类似以下内容。

 foreach (var classifica in leagueTable_object.Rows)
                        {
                        }

您也可以将leagueTable_object直接转换为DataTable,而不是使用 object 。这将使观众更清楚,因为他知道创建了哪种类型的对象。

希望这有帮助。