Java Map 相当于 C 语言#

2022-08-31 07:24:37

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

class Test {
  Map<Integer,String> entities;

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

在 C# 中是否有等效的方法来执行此操作? 不使用哈希,我无法定义自定义类型键不是泛型类
没有方法System.Collections.Generic.HashsetSystem.Collections.HashtableSystem.Collections.Generic.Dictionaryget(Key)


答案 1

你可以索引字典,你不需要“get”。

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

测试/获取值的有效方法是(感恩节到Earwicker):TryGetValue

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

使用此方法,您可以快速且无异常地获取值(如果存在)。

资源:

字典键

尝试获取价值


答案 2

字典<,>是等效的。虽然它没有 Get(...) 方法,但它确实有一个名为 Item 的索引属性,您可以使用索引表示法直接在 C# 中访问该属性:

class Test {
  Dictionary<int,String> entities;

  public String getEntity(int code) {
    return this.entities[code];
  }
}

如果要使用自定义键类型,则应考虑实现 IEquatable<>并覆盖 Equals(object) 和 GetHashCode(),除非默认(引用或结构)相等性足以确定键的相等性。您还应该使密钥类型不可变,以防止在密钥插入字典后发生突变(例如,因为突变导致其哈希代码发生变化)发生奇怪的事情。