C#中的字典未处理异常:“字典中不存在给定键”

时间:2019-03-10 23:28:25

标签: c# list dictionary exception

我正在尝试打印出将模拟图形的C#词典。我的字典看起来像这样:

Dictionary<int, List<int>> graph = new Dictionary<int, List<int>>();

主要,我在字典中添加一些内容,然后尝试将其打印出来:

        dicOfLists myDic = new dicOfLists();

        myDic.AddEdge(1, 2);
        myDic.printList();

方法AddEdgePrintList非常简单:

AddEdge:

    public void AddEdge(int v1, int v2)
    {
        if (graph[v1] == null)
        {
            graph[v1] = new List<int> { v2 };
            return;
        }
        graph[v1].Add(v2);
    }

PrintList:

        for (int i = 0; i < 1; i++)
        {
            Console.WriteLine(graph[i][i]);
        }

我没有用C#或Python进行太多编程,所以字典对我来说是新的。我认为为什么被绊倒比什么都更具概念性,特别是因为我不确定列表在字典中的工作方式。

我目前的理解如下:

在调用Addedge(1, 2)时,我的字典正在创建一个列表,该列表在我的字典的位置2上具有单个元素1。这是因为第一个参数代表字典的键,第二个参数代表列表。像哈希表中那样的关键功能。提供密钥后,字典将在该位置查找,然后创建一个列表。

就像我说的那样,我是C#的新手,所以请不要过分用力。尽管这可能像一个简单的语法错误那样琐碎,但我无法在线找到很多针对此特定问题的东西。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您有一种方法将键/值添加到字典中,然后将其打印出来。打印它们的方法不会“知道”要插入的内容,因此最好是该方法不对字典中的内容进行任何假设。与其仅循环浏览一系列可能的键(0到1,0到 n 等),不如根据字典中的实际内容进行操作。

var keys = graph.Keys;

// or, if you they were entered out of sequence and you want to sort them
var keys = graph.Keys.OrderBy(k => k);

// Now you're using the actual keys that are in the dictionary, so you'll never
// try to access a missing key.

foreach(var key in keys)
{
    // It's not quite as clear to me what you're doing with these objects.
    // Suppose you wanted to print out everything:

    Console.WriteLine($"Key: {key}");

    foreach(var value in graph[key])
    {
        Console.WriteLine(value);
    }        
}