我有一个将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);
答案 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;