2014-11-21 21 views
-1

我有一个将Java代码转换为C#的给定任务。如何在c#中使用Java的get()方法

这是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));    
} 

当我运行该程序,我得到以下异常: “给定的键不存在在字典中“

我的错误在哪里?

EDIT1: 在这里,我已经声明地图:

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

EDIT2: 我得到以下行除外:在Java中相当于

map.Add(node1, adjacent); 
+1

这是您的实际代码或试图总结的问题?我没有在任何地方看到“地图”,你的警卫应该防止这种异常。你确定这个方法中发生异常吗? – 2014-11-21 22:31:43

+0

尝试总结该问题。我声明它在方法 – user3000138 2014-11-21 22:33:18

+0

之上也许它是TryGetValue而不是ContainsKey ..但我不知道如何使用它 – user3000138 2014-11-21 22:57:45

回答

-1

get方法在C# map.ContainsKey(node1)? map [node1]:null;

1

我不知道为什么会你给定的关键是不存在的字典例外,但你应该改变:

map.Add(node1, adjacent); 

到:

map[node1] = adjacent; 

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

+0

不起作用:/ – user3000138 2014-11-21 22:58:14

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

它工作得很好

+0

无法将bool隐式转换为OrderedSet user3000138 2014-11-21 23:07:52

+0

对不起更新代码@@: - >? – 2014-11-21 23:11:42

+1

为什么如果问题中的版本不适用这项工作? – 2014-11-21 23:15:50