foreach循环用于Dictionary

时间:2014-04-29 08:23:39

标签: c# dictionary

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

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

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

如何在不使用public的{​​{1}}修饰符的情况下执行此操作? playerDictionary包含第二个词典,因此我可能无法使用索引器。

3 个答案:

答案 0 :(得分:2)

使用私人设定器将您的字段更改为公共属性:

private Dictionary<int, PlayerInfo> playerDictionary

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

答案 1 :(得分:2)

执行此操作的一种方法是获得可见性的流程数据。

    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
            }
        }
    }

答案 2 :(得分:1)

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

使用此方法意味着您没有代码与GameInfo之外的playerDictionary交互,这意味着您的逻辑分离得更好,如果您对playerDictionary进行更改,则不需要更改多个类。