Für IDictionary<TKey, TValue>
sind die Keys
und Values
Eigenschaften vom Typ ICollection<TKey>
und ICollection<TValue>
.Datentyp der Schlüssel und Werte von IReadOnlyDictionary
Für IReadonlyDictionary<TKey, TValue>
die Keys
und Values
Eigenschaften sind vom Typ IEnumerable<TKey>
und IEnumerable<Value>
.
Warum sind nicht die Eigenschaften von nur die entsprechenden ReadOnly-Schnittstellen, nämlich IReadOnlyCollection<TKey>
und IReadOnlyCollection<TValue>
?
Man könnte sich wundern, warum beide Eigenschaften nicht vom Typ IEnumerable
sind, da Sie das Wörterbuch nicht durch die zwei Eigenschaften, sondern durch Add
und Remove
Methoden ändern können. In der Tat die ICollection
zurückgegeben von IDictionary.Keys
hat die IsReadOnly
Eigenschaft festgelegt, so versucht, Add
oder 10 auf die Eigenschaft zu rufen wirft eine NotSupportedException
mit der zusätzlichen Informationen Muting eine Schlüsselsammlung aus einem Wörterbuch abgeleitet ist nicht erlaubt.
Wenn man das Wörterbuch sowieso nicht über seine Eigenschaften ändern kann, warum sind die beiden IReadOnlyCollections
nicht? Die Schnittstellen wurde zuerst in .NET 4.5 eingeführt, also denke ich, dass das nicht ohne einen unerwünschten Bruch der Abwärtskompatibilität getan werden kann.
Dies ist ein bisschen stumpf. Willst du damit sagen, dass es einfacher, gebräuchlicher und verständlicher ist, eine Keys-Sammlung oder eine Values-Sammlung zu erstellen, die aufzählbar ist, ohne "ICollection" in "IEnumerable " oder "IEnumerable" umwandeln zu müssen? Weil ich damit einsteigen konnte. –
Ich bin nicht 100% sicher, was Sie sagen, aber ich denke, ich stimme zu ... –
'ICollection' erbt von beiden 'IEnumerable 'und' IEnumerable'. Die Entwickler der neueren 'IReadOnlyCollection' fühlten offensichtlich, dass sie die zusammengesetzte Schnittstelle nicht mehr benötigten und konnten direkt von'IEnumerable ' und 'IEnumerable' erben. –