如何在c#中使用Java的map get()方法

时间:2014-11-21 22:25:40

标签: java c# map hashmap

我有一个将Java代码转换为C#的任务。

这是以下Java代码:

public void addEdge(String node1, String node2) {
    LinkedHashSet<String> adjacent = map.get(node1);
    if(adjacent==null) {
        adjacent = new LinkedHashSet();
        map.put(node1, adjacent);
    }
    adjacent.add(node2);
}

这是我的C#代码:

 public void addEdge(string node1, string node2) {
    if (map.ContainsKey(node1)){
        OrderedSet<string> adjacent = map[node1];
        if (adjacent == null)
        {
            adjacent = new OrderedSet<string>();
            map.Add(node1, adjacent);
        }
        adjacent.Add(node2);
    }
       else
        throw new Exception(String.Format("Key {0} was not found", node1));               
}

当我运行程序时,我得到以下异常: &#34;字典中没有给定的密钥&#34;

我的错误在哪里?

EDIT1: 在这里我宣布了地图:

private Dictionary<string, OrderedSet<string>> map = new Dictionary<string, OrderedSet<string>>();

EDIT2: 我在以下行中得到了例外:

map.Add(node1, adjacent);

3 个答案:

答案 0 :(得分:1)

我不知道为什么你会得到字典异常中没有给定的密钥,但你应该改变:

map.Add(node1, adjacent);

为:

map[node1] = adjacent;

如果您尝试添加已存在的密钥,则Add方法将抛出异常。

答案 1 :(得分:0)

愚蠢的投票,真正的代码是

public void addEdge(string node1, string node2) {
        OrderedSet<string> adjacent = map.ContainsKey(node1) ? map[node1] : null;
        if (adjacent == null)
        {
            adjacent = new OrderedSet<string>();
            map.Add(node1, adjacent);
        }
        adjacent.Add(node2);            
}

它工作正常

答案 2 :(得分:-1)

在C#中使用Java等效的get方法 map.ContainsKey(node1)? map [node1]:null;