【问题标题】:foreach loop used with Dictionary与 Dictionary 一起使用的 foreach 循环
【发布时间】:2014-04-29 16:38:53
【问题描述】:

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

现在我想使用 foreach 循环来遍历 playerDictionary 中的所有项目以用于特定游戏:

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

如何在不为playerDictionary 使用public 修饰符的情况下做到这一点? GameInfo 包含第二个字典,所以我可能无法使用索引器。

【问题讨论】:

  • 如果您不想使用公共属性,则无法访问它。所以我建议使用私人支持字段,但使用公共财产。你可以使用Indexer

标签: c# dictionary


【解决方案1】:

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

来自

private Dictionary<int, PlayerInfo> playerDictionary

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

【讨论】:

    【解决方案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
                }
            }
        }
    

    【讨论】:

    • 你可以称它为'GameInfo.ProcessPlayerInfo(gameDictionary, 1);';
    【解决方案3】:

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

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

    【讨论】:

    • foreach 循环中,我需要使用GameInfo 类之外的方法。所以GameInfo 将不再是独立班级。我想我会将playerDictionary 设为public
    • 在这种情况下,我认为最好的方法是 vandango 建议的方法。
    猜你喜欢
    • 2011-08-06
    • 2013-07-06
    • 2022-06-23
    • 2014-04-20
    • 1970-01-01
    • 2013-06-27
    • 2016-12-20
    • 2013-04-26
    相关资源
    最近更新 更多