C # 中的 Java 映射等价物

我试图用我选择的一个键来保存一个集合中的项目列表。在 Java 中,我会简单地使用 Map,如下所示:

class Test {
Map<Integer,String> entities;


public String getEntity(Integer code) {
return this.entities.get(code);
}
}

在 C # 中有类似的方法吗? System.Collections.Generic.Hashset不使用散列,我不能定义自定义类型键 System.Collections.Hashtable不是泛型类
System.Collections.Generic.Dictionary没有 get(Key)方法

176584 次浏览

你可以索引 Dictionary,你不需要‘ get’。

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

测试/获取值的一种有效方法是 TryGetValue(感谢 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];
}
}

如果您想使用自定义键类型,那么您应该考虑实现 IEqutable < > 并重写 Equals (object)和 GetHashCode () ,除非缺省的(引用或结构)相等性足以确定键的相等性。您还应该使您的键类型不可变,以防止奇怪的事情发生,如果一个键是突变后,它已经插入到字典(例如,因为突变导致其哈希代码改变)。

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