C# 如何从另一个类返回列表而不创建无限循环?
我为球员和球队分别上课。我想将一个列表(玩家)返回给Team类,其中包含所有匹配同一teamid的玩家。我已经设法在Player类中实现了这一点(找到了一个与Player的teamid匹配的单独团队),但是当尝试在team类中的列表中实现这一点时,我得到了一个无限循环错误 我会给你们看我试图使用的代码,但必须有一个更简单的方法来做到这一点。我认为发生这种情况的原因是,玩家是在加载文件后生成的,但团队是在打开游戏时创建的(我仍在进行大量测试,因此团队是在打开游戏时生成的,而不是像生成玩家那样单击按钮) 我还认为发生无限循环是因为Form1在Team.cs中被调用。。我只是不知道怎么做,所以任何帮助都是感激的 因此,在Player.cs上,我有以下代码(非常有效): 由于Form1在创建球员时已经被实例化(当前是在程序上单击一个按钮,但稍后它将在联盟创建上而不是按钮),上述代码可以工作 如果你们能帮我找到一种不用Form1的方法,那也太好了。但目前的主要问题是下面的代码,它创建了一个无限循环 在Team.cs上,我有以下代码,但不起作用:C# 如何从另一个类返回列表而不创建无限循环?,c#,C#,我为球员和球队分别上课。我想将一个列表(玩家)返回给Team类,其中包含所有匹配同一teamid的玩家。我已经设法在Player类中实现了这一点(找到了一个与Player的teamid匹配的单独团队),但是当尝试在team类中的列表中实现这一点时,我得到了一个无限循环错误 我会给你们看我试图使用的代码,但必须有一个更简单的方法来做到这一点。我认为发生这种情况的原因是,玩家是在加载文件后生成的,但团队是在打开游戏时创建的(我仍在进行大量测试,因此团队是在打开游戏时生成的,而不是像生成玩家那样单击按
Form1 f1 = new Form1();
//THIS IS CREATING AN INFINITE LOOP... THERE HAS TO BE ANOTHER WAY TO FIND THE PLAYERS WITH THE SAME TEAMID???
public List<Player> Players
{
get
{
Player player = f1.getPlayers.Find(
delegate (Player p) { return p.teamid == teamid; });
foreach (Player p in players)
{
Players.Add(p);
}
return Players;
}
}
form1f1=newform1();
//这是在创建一个无限循环。。。必须有另一种方法找到具有相同TEAMID的球员???
公开球员名单
{
收到
{
Player=f1.getPlayers.Find(
代表(玩家p){return p.teamid==teamid;});
foreach(玩家中的玩家p)
{
玩家。添加(p);
}
返回球员;
}
}
这就是GetPlayer的内部功能:
public List<Player> getPlayers
{
get
{
return listOfPlayers;
}
set
{
listOfPlayers = value;
}
}
public-List-getPlayers
{
收到
{
返回层列表;
}
设置
{
ListOfLayers=值;
}
}
您需要getter创建自己的列表并返回该列表。实际上,您正在从Players
getter内部引用Players
,因此,由于无限递归,您将得到堆栈溢出
修正:
更新:
因为我们现在可以看到f1.getPlayers
返回一个列表
,所以这更合适(Where
过滤列表,而Find
只返回一个匹配项):
公共IList播放器
{
收到
{
返回f1.getPlayers.Where(p=>p.teamid==teamid).ToList()
}
}
players指的是什么?players中的Player p
只需返回players
可能,但您的代码不完整。嗯,请后退一步,尝试重新设计您的模型。你是对的。如果您的模型设计得当,可能会有更好的方法。玩家是Team.cs上的列表。我希望通过找到与他们的团队ID相匹配的玩家来创建这个列表。试着发布一个MCVE,如中所述,创建一个控制台应用程序,摆脱表单和额外的复杂性。然后,让我们看看这两个类是如何交互的。我尝试了这个方法,但在ToList()上出现了一个错误。“Player”不包含“ToList”的定义,并且找不到接受“Player”类型的第一个参数的扩展方法“ToList”(是否缺少using指令或程序集引用?)您是否有using System.Linq代码>?如果是这样,可能是.Find()
不是IEnumerable
。我确实有一个使用系统。LinqI刚刚尝试使用您的第二个系统,我现在在foreach上发现此错误。。。。foreach语句无法对“Interior\u Football\u Manager.Player”类型的变量进行操作,因为“…Player”不包含“GetEnumerator”@RobertCole何谓getPlayers()
”的公共定义,您需要用该定义更新您的问题
public List<Player> getPlayers
{
get
{
return listOfPlayers;
}
set
{
listOfPlayers = value;
}
}
using System.Linq;
// ...
public IList<Player> Players
{
get
{
// Assuming that `.Find(...)` returns an `IEnumerable<Player>`
return f1.getPlayers.Find(p => p.teamid == teamid).ToList()
}
}
public IList<Player> Players
{
get
{
var result = new List<Player>();
foreach (var player in f1.getPlayers.Find(p => p.teamid == teamid))
{
result.Add(player);
}
return result;
}
}
public IList<Player> Players
{
get
{
return f1.getPlayers.Where(p => p.teamid == teamid).ToList()
}
}