que obtener leer imprimir ejemplos diccionario consultar buscar acceder c# .net dictionary

leer - obtener key de un diccionario c#



Declarar un diccionario dentro de una clase estática (9)

Cree un constructor estático para agregar valores en el diccionario

enum Commands { StudentDetail } public static class Quires { public static Dictionary<Commands, String> quire = new Dictionary<Commands, String>(); static Quires() { quire.add(Commands.StudentDetail,@"SELECT * FROM student_b"); } }

¿Cómo declarar un objeto de diccionario estático dentro de una clase estática? Lo intenté

public static class ErrorCode { public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>() { { "1", "User name or password problem" } }; }

Pero el compilador se queja de que " Un campo const de un tipo de referencia que no sea una cadena solo se puede inicializar con nulo ".


El problema con su ejemplo inicial se debió principalmente al uso de const lugar de static ; no puede crear una referencia de referencia no nula en C #.

Creo que esto también habría funcionado:

public static class ErrorCode { public static IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>() { {"1", "User name or password problem"} }; }

Además, como Y Low señala, también es una buena idea agregar readonly , y ninguno de los modificadores discutidos aquí evitará que el diccionario en sí sea modificado.


Haga que el diccionario sea estático y nunca lo agregue fuera del ctor de su objeto estático. Esa parece ser una solución más simple que jugar con las reglas estáticas / const en C #.


La sintaxis correcta (como se probó en VS 2008 SP1) es la siguiente:

public static class ErrorCode { public static IDictionary<string, string> ErrorCodeDic; static ErrorCode() { ErrorCodeDic = new Dictionary<string, string>() { {"1", "User name or password problem"} }; } }



Puede usar el constructor estático / de clase para inicializar su diccionario:

public static class ErrorCode { public const IDictionary<string, string> ErrorCodeDic; public static ErrorCode() { ErrorCodeDic = new Dictionary<string, string>() { {"1", "User name or password problem"} }; } }


Si quieres declarar el diccionario una vez y nunca cambiarlo, declaralo como de solo lectura:

private static readonly Dictionary<string, string> ErrorCodes = new Dictionary<string, string> { { "1", "Error One" }, { "2", "Error Two" } };

Si desea que los elementos del diccionario sean de solo lectura (no solo la referencia sino también los elementos de la colección), deberá crear una clase de diccionario de solo lectura que implemente IDictionary.

Consulte ReadOnlyCollection para referencia.

BTW const solo se puede usar cuando se declaran valores escalares en línea.


Una vieja pregunta, pero encontré esto útil. Resulta que también hay una clase especializada para un diccionario que usa una cadena para la clave y el valor:

private static readonly StringDictionary SegmentSyntaxErrorCodes = new StringDictionary { { "1", "Unrecognized segment ID" }, { "2", "Unexpected segment" } };

Editar: Por el comentario de Chris a continuación, usar Dictionary<string, string> sobre StringDictionary es generalmente preferido, pero dependerá de su situación. Si está tratando con una base de códigos anterior, puede estar limitado a StringDictionary . Además, tenga en cuenta que la siguiente línea:

myDict["foo"]

devolverá null si myDict es un StringDictionary , pero se StringDictionary una excepción en el caso de Dictionary<string, string> . Consulte la publicación SO que mencionó para obtener más información, que es la fuente de esta edición.


public static class ErrorCode { public const IDictionary<string , string > m_ErrorCodeDic; public static ErrorCode() { m_ErrorCodeDic = new Dictionary<string, string>() { {"1","User name or password problem"} }; } }

Probablemente inicie en el constructor.