从 Java 世界进入 C# 世界是否有等效的 HashMap?如果不是你会推荐什么?
原文由 John 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要一个接受“空”键的字典,但似乎没有本地字典,所以我自己写了一个。其实很简单。我继承自 Dictionary,添加了一个私有字段来保存“null”键的值,然后覆盖了索引器。它是这样的:
public class NullableDictionnary : Dictionary<string, string>
{
string null_value;
public StringDictionary this[string key]
{
get
{
if (key == null)
{
return null_value;
}
return base[key];
}
set
{
if (key == null)
{
null_value = value;
}
else
{
base[key] = value;
}
}
}
}
希望这对将来的人有帮助。
==========
我修改成这种格式
public class NullableDictionnary : Dictionary<string, object>
原文由 KeithC 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.5k 阅读
4 回答701 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
Dictionary
可能是最接近的。System.Collections.Generic.Dictionary
实现了System.Collections.Generic.IDictionary
接口(类似于Java的Map
接口)。您应该注意的一些显着差异:
添加/获取项目
put
和get
设置/获取项目的方法myMap.put(key, value)
MyObject value = myMap.get(key)
[]
设置/获取项目的索引myDictionary[key] = value
MyObject value = myDictionary[key]
null
键HashMap
允许空键Dictionary
抛出ArgumentNullException
如果您尝试添加空键添加重复键
HashMap
将用新值替换现有值。[]
索引,.NET 的Dictionary
将用新值替换现有值。如果您使用Add
方法,它会抛出一个ArgumentException
。试图获取不存在的密钥
HashMap
将返回 null。Dictionary
将抛出KeyNotFoundException
。您可以使用TryGetValue
方法而不是[]
索引来避免这种情况:MyObject value = null; if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
的有一个ContainsKey
方法可以帮助处理前两个问题。