Deklarieren Sie ein Dictionary in einer statischen Klasse
Wie deklarieren Sie eine statische dictionary-Objekt in einer statischen Klasse? Ich habe versucht,
public static class ErrorCode
{
public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>()
{
{ "1", "User name or password problem" }
};
}
Aber der compiler beschwert sich, dass "Ein const-Feld eine Referenz-Typ als string kann nur mit null initialisiert werden".
Kommentar zu dem Problem
Sie können nicht verwenden Sie const, mit den Dictionary-Typ, nur mit skalaren Werten. (überprüfen Sie meine Antwort) msdn.microsoft.com/en-us/library/e6w8fe1b(VS.71).aspx
InformationsquelleAutor der Frage Graviton | 2008-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, zu erklären, das Wörterbuch einmal und nie ändern Sie es dann erklären Sie es als readonly:
Wenn Sie möchten, Wörterbuch, Elemente readonly (nicht nur die Referenz, sondern auch die Elemente in der Auflistung), dann müssen Sie erstellen Sie ein readonly dictionary-Klasse, die implementiert IDictionary.
Check-out ReadOnlyCollection für Referenz.
BTW const kann nur verwendet werden, wenn die Deklaration skalarer Werte inline.
InformationsquelleAutor der Antwort Yona
In der korrekten syntax ( wie getestet im VS 2008 SP1), ist diese:
InformationsquelleAutor der Antwort Graviton
Alte Frage, aber ich fand dies nützlich. Stellt sich heraus, es gibt auch eine spezielle Klasse für ein Dictionary mit einem string für sowohl den Schlüssel als auch den Wert:
Edit: Pro Chris ' s Kommentar unten, mit
Dictionary<string, string>
überStringDictionary
ist in der Regel bevorzugt, aber abhängig von Ihrer situation. Wenn man sich mit einem älteren code-Basis, Sie könnte begrenzt werden, um dieStringDictionary
. Beachten Sie auch, dass die folgende Zeile:wird null zurückgeben, wenn
myDict
ist einStringDictionary
, aber eine Ausnahme wird geworfen, falls derDictionary<string, string>
. Finden Sie die SO post er erwähnt für mehr Informationen, was ist die Quelle dieses Bearbeiten.InformationsquelleAutor der Antwort areyling
Sich das problem mit dem ersten Beispiel wurde in Erster Linie durch die Verwendung von
const
eher alsstatic
; Sie können nicht erstellen Sie einen nicht-null-const-reference in C#.Ich glaube, das würde auch gearbeitet haben:
Auch, als Y Niedrig, weist darauf hin, hinzufügen
readonly
ist eine gute Idee als gut, und keiner von den Modifikatoren, die hier diskutiert wird verhindern, dass das Wörterbuch selbst geändert werden.InformationsquelleAutor der Antwort Charlie
InformationsquelleAutor der Antwort Sujith Radhakrishnan
Damit das Wörterbuch eine statische, und nie hinzufügen, um es außerhalb Ihrer statischen Objekt ctor. Das scheint eine einfachere Lösung als das hantieren mit den static/const Regeln in C#.
InformationsquelleAutor der Antwort Jeff Hubbard
OK - also ich arbeite im ASP-2.x (nicht meine Wahl...aber hey, wer meckern?).
Keiner der initialize Dictionary Beispiele funktionieren würde. Dann stieß ich auf dieses:
http://kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing-dictionaries-and-collections.aspx
...das Walmdach mir die Tatsache, dass man nicht auf der Verwendung von Sammlungen Initialisierung im ASP-2.x.
InformationsquelleAutor der Antwort jray
Verwenden Sie die statischen/Konstruktor der Klasse initialisieren Ihrem Wörterbuch:
InformationsquelleAutor der Antwort Andy
Wahrscheinlich durch die Initialisierung in den Konstruktor.
InformationsquelleAutor der Antwort Craig