Angenommen, ich habe eine Klasse Composite
, die aus einem Wörterbuch von Instrumenten und Gewichten aufgebaut ist.Gibt es eine einfache Möglichkeit, ein Dictionary-ähnliches Objekt zu erstellen, das nicht hinzugefügt werden kann, dessen Werte jedoch geändert werden können?
public IReadOnlyDictionary<Instrument, double> Underlyings{ get; private set; }
public Composite(
Id id,
Currency currency,
Dictionary<Instrument, double> underlyings
)
{
Underlyings= underlyings;
}
}
Diese Klasse wird dem Kunden ausgesetzt sind, und ich möchte der Kunde in der Lage sein, die bestehenden Schlüssel Werte innerhalb Underlyings
, zu modifizieren, aber nicht neue Schlüssel-Wert-Paare zu Underlyings
hinzufügen.
Dann Underlyings
eine ReadOnlyDictionary
wird nicht funktionieren, da der Client-Code nicht in der Lage sein wird, die Werte für vorhandene Schlüssel zu ändern. Meine Lösung bestand also darin, den Wrapper um ein Wörterbuch von this answer zu nehmen und den Setzer für TValue IDictionary<TKey, TValue>.this[TKey key]
so zu modifizieren, dass vorhandene Werte geändert werden können. Aber das scheint eine alberne Lösung zu sein - gibt es einen einfacheren Weg als das Schreiben einer Wrapper-Klasse, um ein Dictionary zu haben, das modifizierbare existierende Schlüssel-Wert-Paare hat, aber nicht neue Schlüssel-Wert-Paare hinzugefügt werden können? Entschuldigung für die sehr simple Frage.
@Damien_The_Unbeliever Entschuldigt, wenn ich Mißverständnis Ihren Vorschlag, aber ich glaube nicht, Eigenschaften funktionieren würde, weil ein Verbund nur eine Sammlung von Instrumenten ist, die nicht von Natur aus ein Gewicht haben. Das Gewicht gehört nur zum Verbund selbst. Die Gewichte für jedes Instrument müssen ständig neu gewichtet werden (oder geändert werden), aber sie sind nicht von Natur aus Eigenschaften der Instrumente selbst - sie existieren nur innerhalb des Kontextes dieser Zusammensetzung. Und es gibt Hunderte von verschiedenen Composites. Wenn das einen Sinn ergab? –