Déclarer un Dictionnaire à l'intérieur d'une classe statique
Comment déclarer un dictionnaire statique de l'objet à l'intérieur d'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 "const champ d'un type de référence autre que la chaîne ne peut être initialisé avec la valeur null".
- Vous ne pouvez pas utiliser const avec le type de Dictionnaire, seulement avec des valeurs scalaires. (vérifier ma réponse) msdn.microsoft.com/en-us/library/e6w8fe1b(SV.71).aspx
Vous devez vous connecter pour publier un commentaire.
Si vous voulez déclarer le dictionnaire une fois et de ne jamais le modifier, alors le déclarer comme readonly:
Si vous souhaitez des éléments dans le dictionnaire pour être en lecture seule (et pas seulement de la référence, mais aussi les éléments de l'ensemble), alors vous devrez créer un readonly dictionnaire de la classe qui implémente IDictionary.
Découvrez ReadOnlyCollection de référence.
BTW const ne peut être utilisé lors de la déclaration de valeurs scalaires en ligne.
ReadOnlyDictionary
. Plus efficace (mais moins sûr option) est à attribuer à unIReadOnlyDictionary
type.La syntaxe correcte ( testé dans VS 2008 SP1), est-ce:
Vieille question, mais j'ai trouvé cela utile. S'avère, il ya aussi une classe spécialisée pour un Dictionnaire à l'aide d'une chaîne de caractères pour la clé et la valeur:
Edit: Par Chris de commentaire ci-dessous, à l'aide de
Dictionary<string, string>
surStringDictionary
est généralement préféré, mais dépendra de votre situation. Si vous avez affaire à une ancienne base de code, vous pourriez être limité à laStringDictionary
. Aussi, notez que la ligne suivante:renvoie la valeur null si
myDict
est unStringDictionary
, mais une exception est levée dans le cas deDictionary<string, string>
. Voir la DONC, après il a mentionné pour plus d'information, qui est la source de cette édition.StringDictionary
plutôt queDictionary<string, string>
?Le problème avec votre exemple est principalement due à l'utilisation de
const
plutôt questatic
; vous ne pouvez pas créer une valeur non nulle référence const en C#.Je crois que cela aurait également travaillé:
Aussi, Y des points Faibles de sortir, en ajoutant
readonly
est une bonne idée, et aucun des modificateurs discuté ici empêche le dictionnaire lui-même d'être modifiés.Faire le Dictionnaire statique, et n'ajoutez jamais de l'extérieur de votre statique de l'objet ctor. Cela semble être une solution plus simple que de se tripoter la statique/const règles en C#.
OK - donc, je suis en train de travailler dans l'ASP 2.x (pas mon choix...mais bon qui de râler?).
Aucun des initialiser le Dictionnaire des exemples de travail. Puis je suis tombé sur ceci:
http://kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing-dictionaries-and-collections.aspx
...qui en croupe moi du fait que l'on ne peut pas utiliser des collections de l'initialisation de l'ASP 2.x.
Vous pouvez utiliser la statique/constructeur de la classe pour initialiser votre dictionnaire:
Probablement initialiser dans le constructeur.