在C#中等效的Java Map

我想用我select的一个键来保存一个集合中的项目列表。 在Java中,我会简单地使用Map如下:

class Test { Map<Integer,String> entities; public String getEntity(Integer code) { return this.entities.get(code); } } 

有没有在C#中这样做的等效方式? System.Collections.Generic.Hashset不使用散列,我不能定义一个自定义types键System.Collections.Hashtable不是一个generics类
System.Collections.Generic.Dictionary没有get(Key)方法

你可以索引字典,你不需要'得到'。

 Dictionary<string,string> example = new Dictionary<string,string>(); ... example.Add("hello","world"); ... Console.Writeline(example["hello"]); 

testing/获取值的有效方法是TryGetValue (thanx to Earwicker):

 if (otherExample.TryGetValue("key", out value)) { otherExample["key"] = value + 1; } 

有了这个方法,你可以快速和无例外的获取值(如果存在)。

资源:

字典密钥

尝试获取价值

Dictionary <,>是等效的。 虽然它没有Get(…)方法,但它有一个名为Item的索引属性,您可以使用索引符号直接在C#中访问:

 class Test { Dictionary<int,String> entities; public String getEntity(int code) { return this.entities[code]; } } 

如果你想使用一个自定义的键types,那么你应该考虑实现IEquatable <>并重写Equals(object)和GetHashCode(),除非默认(引用或结构)等于足以确定键的相等性。 你也应该让你的键types不可变,以防止奇怪的事情发生,如果一个键被插入到字典后发生了变化(例如,因为突变导致其哈希码改变)。

 class Test { Dictionary<int, string> entities; public string GetEntity(int code) { // java's get method returns null when the key has no mapping // so we'll do the same string val; if (entities.TryGetValue(code, out val)) return val; else return null; } }