与Dictionary一起使用的foreach循环

本文关键字:foreach 循环 Dictionary 一起 | 更新日期: 2023-09-27 18:00:36

我有一个字典:private static Dictionary<int, GameInfo> gameDictionary;,它包含GameInfo类的实例,它本身包含下一个字典private Dictionary<int, PlayerInfo> playerDictionary;

现在,我想使用foreach循环来迭代特定游戏的playerDictionary中的所有项目:

foreach (KeyValuePair<int, PlayerInfo> item in gameDictionary[GAME_ID].)
{
}

如何在不使用playerDictionarypublic修饰符的情况下执行此操作?GameInfo包含第二个Dictionary,所以我可能无法使用索引器。

与Dictionary一起使用的foreach循环

使用私有setter:将字段更改为公共属性

来自

private Dictionary<int, PlayerInfo> playerDictionary

public Dictionary<int, PlayerInfo> PlayerDictionary { get; private set;}

实现这一点的一种方法是在有可见性的地方处理数据。

    public class GameInfo {
        private Dictionary<int, PlayerInfo> playerDictionary;
        static void ProcessPlayerInfo(Dictionary<int, GameInfo> gameDictionary, int gameNr = 1)
        {
            foreach (var key in gameDictionary[gameNr].playerDictionary.Keys)
            {
                var PlayerInfo = gameDictionary[gameNr].playerDictionary[key];
                //do something
            }
        }
    }

最好的方法是在GameInfo中创建一个在playerDictionary上循环的公共方法。然后可以使用((GameInfo)gamedictionary[Game_ID].value).PublicMethod()调用它。

使用这种方法意味着你没有代码在GameInfo之外与playerDictionary交互,这意味着你的逻辑可以更好地分离,如果你更改了playerDiction,你不需要更改多个类。