c# java generics collections

dictionary c#



Java Map equivalente en C# (3)

Estoy tratando de mantener una lista de elementos en una colección con una clave de mi elección. En Java, simplemente usaría Map de la siguiente manera:

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

¿Hay una manera equivalente de hacer esto en C #? System.Collections.Generic.Hashset no usa hash y no puedo definir una clave de tipo personalizada System.Collections.Hashtable no es una clase genérica
System.Collections.Generic.Dictionary no tiene un método get(Key)


Dictionary <,> es el equivalente. Si bien no tiene un método Get (...), sí tiene una propiedad indexada llamada Item a la que se puede acceder en C # directamente usando la notación de índice:

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

Si desea utilizar un tipo de clave personalizada, debe considerar la implementación de IEquatable <> y anular Igual (objeto) y GetHashCode () a menos que la igualdad predeterminada (referencia o estructura) sea suficiente para determinar la igualdad de claves. También debe hacer que su tipo de clave sea inmutable para evitar que sucedan cosas extrañas si una clave está mutada después de haber sido insertada en un diccionario (p. Ej., Porque la mutación hizo que su código hash cambiara).


Puedes indexar el diccionario, no necesitas ''obtener''.

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

Una forma eficiente de probar / obtener valores es TryGetValue (gracias a Earwicker):

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

Con este método puede obtener valores rápidos y sin excepciones (si están presentes).

Recursos:

Dictionary-Keys

Pruebe obtener valor


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