从 MultiDictionary 获取所有键

Get all Keys from a MultiDictionary

我正在寻找一种方法来获取 multiDictionary 的所有一级键,但我完全无法获取它们(用于调试目的)

我这样声明字典:

        private Dictionary<string, Dictionary<string, Packet>> PacketsStore = new Dictionary<string, Dictionary<string, Packet>>();

那么我怎样才能打印出所有基本键的列表?

我怎么才能打印出二级密钥,以防我以后需要它...

提前致谢!

对于所有键,尝试:

var keys = PacketsStore.Keys.ToArray();

对于二级密钥:

List<string> secondaryKeys;
foreach (var key in keys)
{
     secondaryKeys.AddRange(PacketStore[key].Keys.ToArray());
}
foreach(KeyValuePair<string, Dictionary<string, Packet>> entry in PacketsStore)
{
    string key = entry.Key; // first level
    foreach(KeyValuePair<string, Packet> entryInner in entry.Value)
    {
       string keyInner = entryInner.Key // second level
    }
}

我已将键放入变量中,您可以将其放入某些集合中。目的是获得钥匙:)

一级,众所周知的方式:

var allKeys = PacketsStore.Keys;

子字典键,LINQ方式:

var allSubKeys = PacketsStore.SelectMany(pair => pair.Value.Keys);

OP 已经在其他答案中注释掉了两个嵌套的 foreach 循环更适合调试目的,但是,毕竟如果 OP 想要将所有子键输出到控制台,它仍然可以完成单线解决方案:

// One-liner solution!
PacketsStore.SelectMany(pair => pair.Value.Keys).ToList().ForEach(Console.WriteLine);