在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; } }
- Collection.stream()。forEach()和Collection.forEach()之间有什么区别?
- jquery如何在数组中find一个Object by属性
- Java:迭代通过一个集合的最佳方式(这里是ArrayList)
- 什么是实现线程安全字典的最佳方式?
- 使ArrayList只读
- 在@RequestParam中绑定列表
- Linq。所有VS.Exists – 有什么区别?
- 在Arrays.asList(数组)与新的ArrayList <Integer>(Arrays.asList(ia))之间的区别
- 什么时候应该在Java中接受Iterable <T>与Collection <T>的参数?