Comment déclarer un objet dictionnaire statique dans une classe statique? j'ai essayé
public static class ErrorCode
{
public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>()
{
{ "1", "User name or password problem" }
};
}
Mais le compilateur se plaint que " Un champ const d'un type de référence autre que string ne peut être initialisé qu'avec null ".
c#
.net
dictionary
Graviton
la source
la source
Réponses:
Si vous souhaitez déclarer le dictionnaire une fois et ne jamais le modifier, déclarez-le en lecture seule:
Si vous souhaitez que les éléments du dictionnaire soient en lecture seule (pas seulement la référence, mais également les éléments de la collection), vous devrez créer une classe de dictionnaire en lecture seule qui implémente IDictionary.
Consultez ReadOnlyCollection pour référence.
BTW const ne peut être utilisé que lors de la déclaration de valeurs scalaires en ligne.
la source
ReadOnlyDictionary
. Une option plus efficace (mais moins sûre) consiste à l'attribuer à unIReadOnlyDictionary
type.La syntaxe correcte (telle que testée dans VS 2008 SP1) est la suivante:
la source
Ancienne question, mais j'ai trouvé cela utile. Il s'avère qu'il existe également une classe spécialisée pour un dictionnaire utilisant une chaîne à la fois pour la clé et la valeur:
Edit: Selon le commentaire de Chris ci-dessous, l'utilisation de
Dictionary<string, string>
overStringDictionary
est généralement préférée mais dépendra de votre situation. Si vous avez affaire à une base de code plus ancienne, vous pourriez être limité auStringDictionary
. Notez également que la ligne suivante:retournera null si
myDict
est aStringDictionary
, mais une exception sera levée dans le cas deDictionary<string, string>
. Voir le message SO qu'il a mentionné pour plus d'informations, qui est la source de cette modification.la source
StringDictionary
plutôt queDictionary<string, string>
?Le problème avec votre exemple initial était principalement dû à l'utilisation de
const
plutôt questatic
; vous ne pouvez pas créer une référence const non nulle en C #.Je pense que cela aurait également fonctionné:
De plus, comme le souligne Y Low, l'ajout
readonly
est également une bonne idée, et aucun des modificateurs discutés ici n'empêchera le dictionnaire lui-même d'être modifié.la source
la source
Rendez le dictionnaire statique et ne l'ajoutez jamais en dehors du ctor de votre objet statique. Cela semble être une solution plus simple que de jouer avec les règles static / const en C #.
la source
OK - donc je travaille sous ASP 2.x (ce n'est pas mon choix ... mais bon qui râle?).
Aucun des exemples d'initialisation du dictionnaire ne fonctionnerait. Puis je suis tombé sur ceci: http://kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing-dictionaries-and-collections.aspx
... ce qui m'a amené au fait qu'on ne peut pas utiliser l'initialisation des collections dans ASP 2.x.
la source
Vous pouvez utiliser le constructeur static / class pour initialiser votre dictionnaire:
la source
Initialisez probablement dans le constructeur.
la source