Wie deklariere ich ein statisches Wörterbuchobjekt innerhalb einer statischen Klasse? Ich habe es versucht
public static class ErrorCode
{
public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>()
{
{ "1", "User name or password problem" }
};
}
Der Compiler beschwert sich jedoch darüber, dass " ein const-Feld eines anderen Referenztyps als string nur mit null initialisiert werden kann ".
c#
.net
dictionary
Graviton
quelle
quelle
Antworten:
Wenn Sie das Wörterbuch einmal deklarieren und niemals ändern möchten, deklarieren Sie es als schreibgeschützt:
Wenn Sie Wörterbuchwörterbücher schreibgeschützt machen möchten (nicht nur die Referenz, sondern auch die Elemente in der Sammlung), müssen Sie eine schreibgeschützte Wörterbuchklasse erstellen, die IDictionary implementiert.
Schauen Sie sich ReadOnlyCollection als Referenz an.
BTW const kann nur verwendet werden, wenn Skalarwerte inline deklariert werden.
quelle
ReadOnlyDictionary
. Eine effizientere (aber weniger sichere) Option besteht darin, sie einemIReadOnlyDictionary
Typ zuzuweisen .Die korrekte Syntax (wie in VS 2008 SP1 getestet) lautet:
quelle
Alte Frage, aber ich fand das nützlich. Es stellt sich heraus, dass es auch eine spezielle Klasse für ein Wörterbuch gibt, die eine Zeichenfolge sowohl für den Schlüssel als auch für den Wert verwendet:
Bearbeiten: Gemäß Chris 'Kommentar unten wird die Verwendung von
Dictionary<string, string>
overStringDictionary
im Allgemeinen bevorzugt, hängt jedoch von Ihrer Situation ab. Wenn Sie mit einer älteren Codebasis arbeiten, sind Sie möglicherweise auf die beschränktStringDictionary
. Beachten Sie auch die folgende Zeile:gibt null zurück, wenn a
myDict
istStringDictionary
, aber im Fall von wird eine Ausnahme ausgelöstDictionary<string, string>
. Sehen Sie sich die SO Post erwähnte er für weitere Informationen, die die Quelle dieser bearbeiten ist.quelle
StringDictionary
lieber verwenden alsDictionary<string, string>
?Das Problem mit Ihrem ersten Beispiel war hauptsächlich auf die Verwendung von
const
anstatt zurückzuführenstatic
. Sie können in C # keine Nicht-Null-Konstantenreferenz erstellen.Ich glaube, das hätte auch funktioniert:
Wie Y Low hervorhebt, ist das Hinzufügen ebenfalls
readonly
eine gute Idee, und keiner der hier diskutierten Modifikatoren verhindert, dass das Wörterbuch selbst geändert wird.quelle
quelle
Machen Sie das Wörterbuch zu einem statischen Wörterbuch und fügen Sie es niemals außerhalb des Ctors Ihres statischen Objekts hinzu. Das scheint eine einfachere Lösung zu sein, als mit den statischen / const-Regeln in C # herumzuspielen.
quelle
OK - also arbeite ich in ASP 2.x (nicht meine Wahl ... aber hey, wer meckert?).
Keines der Beispiele für das Initialisierungswörterbuch würde funktionieren. Dann bin ich auf Folgendes gestoßen : http://kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing-dictionaries-and-collections.aspx
... was mich auf die Tatsache aufmerksam machte, dass man die Initialisierung von Sammlungen in ASP 2.x nicht verwenden kann.
quelle
Sie können den statischen / Klassenkonstruktor verwenden, um Ihr Wörterbuch zu initialisieren:
quelle
Wahrscheinlich im Konstruktor initialisieren.
quelle