4 Stimmen

Unveränderliches Wörterbuch

Ich frage mich, ob ich eine Eigenschaft erstellen kann, die ein Nur-Lese-Wörterbuch zurückgibt?

Beispiel:

    private readonly Dictionary<string, IMyObject> _myDictionary;
    public Dictionary<string, IMyObject> MyDictionary
    {
        get { return _myDictionary; }
    }

Daher ist es den Benutzern von MyDictionary nicht gestattet, Einträge hinzuzufügen, zu entfernen oder zu ändern. Gibt es eine Möglichkeit, dies zu ändern?

0 Stimmen

Fragen Sie sich, ob nur die Menge der Schlüssel nicht geändert werden kann, aber die Werte eines bestimmten Schlüssels können geändert werden? Oder fragen Sie, ob es eine Möglichkeit gibt, den gesamten Inhalt des Wörterbuchs als schreibgeschützt zu behandeln?

0 Stimmen

Da ich diese Frage vor fast zehn Jahren gestellt habe, bin ich mir nicht mehr sicher :)

0 Stimmen

Np völlig verständlich! Ich habe die Frage editiert, um das zu vermitteln, was in den Antworten anscheinend so interpretiert wurde.

7voto

luvieere Punkte 36219

Ich denke, dass Sie eine Klasse benötigen, die eine Dictionary wie die ReadOnlyCollection wickelt eine List .

Sie werden zwar keine Standardklasse finden, die dies tut, aber Sie werden eine Implementierung in einer der Antworten auf diese Frage.

Die BCL Extras Projekt enthält ebenfalls eine solche Implementierung. Sie unterstützt die Erstellung eines Proxy-Objekts, das die IDictionary und kann an seiner Stelle verwendet werden.

0 Stimmen

Danke, diese Frage habe ich übersehen.

2voto

pavel Punkte 21

.Net 4.5: System.Collections.ObjectModel.ReadOnlyDictionary

0 Stimmen

Gut zu wissen, dass es umgesetzt wurde.

1voto

leppie Punkte 111830

Vererben von System.Collections.ObjectModel.KeyedCollection<TKey,TItem>

Überschreiben Sie InsertItem und RemoveItem

0voto

Rob Levine Punkte 38688

C# bietet keine Möglichkeit, dies genau so zu tun, wie Sie vorschlagen, aber Sie könnten immer ein "hausgemachtes" unveränderliches Wörterbuch zurückgeben, das Ihr myDictionary umschließt.

Weitere Informationen zur Erstellung eines unveränderlichen Wörterbuchs finden Sie hier.

Gibt es in C# eine Möglichkeit, mir ein unveränderliches Dictionary zu geben?

0voto

Amy B Punkte 104656

Wenn der Zweck der Bereitstellung dieses unveränderlichen Wörterbuchs darin besteht, Ihr eigenes Wörterbuch zu schützen, geben Sie ihnen einfach eine flache Kopie.

public Dictionary<string, IMyObject> MyDictionary 
{ 
    get { return new Dictionary<string, IMyObject>(_myDictionary); } 
} 

Der Anrufer kann hinzufügen und entfernen, was immer er will, aber für Ihr Wörterbuch spielt das keine Rolle.

Natürlich hat der Aufrufer weiterhin Zugriff auf die Dinge im Wörterbuch und kann sie verändern. Wenn das ein Problem ist, machen Sie eine Deep Copy.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X