Ich erstelle eine Erweiterungsmethode für MultiValueDictionary um häufige ContainsKey
Checks einzukapseln und ich fragte mich, was der beste Weg wäre, um eine leere IReadOnlyCollection
zu erstellen ?.
Was ich bisher verwendet habe, ist new List<TValue>(0).AsReadOnly()
, aber es muss einen besseren Weg geben, ein Äquivalent zu IEnumerable
s Enumerable.Empty
EDIT: Das neue .Net 4.6 fügt eine API hinzu, um ein leeres Array zu erhalten: Array.Empty<T>
und Arrays implementieren IReadOnlyCollection<T>
. Dies reduziert auch die Zuweisung, da nur einmal eine Instanz erstellt wird:
Was ich am Ende gemacht habe, ist die Imitation der Implementierung von Enumerable.Empty
mit new TElement[0]
:
Verwendung:
%Vor%Ich glaube nicht, dass es% %% %% für schreibgeschützte Sammlungen gibt, aber:
Enumerable.Empty
implementiert bereits List<T>
, so dass Sie eine Objektzuordnung vermeiden können, indem Sie nicht IReadOnlyCollection<T>
aufrufen und stattdessen die Liste einfach umwandeln. Das ist in der Theorie weniger "sicher", aber in der Praxis kaum.
Alternativ können Sie die zurückgegebene ReadOnlyCollection zwischenspeichern, um jegliche Objektzuweisung (mit Ausnahme des zwischengespeicherten Objekts) zu vermeiden.
Soweit ich weiß, gibt es keinen eingebauten Weg (interessiert zu wissen, ob man). Das heißt, Sie können Folgendes verwenden:
%Vor% Optional können Sie die Ergebnisse zwischenspeichern, da es ein ReadOnlyCollection
über einem leeren Array ist. Es wird immer dasselbe sein, egal wie viele Instanzen Sie haben.
Wie geht es Ihnen, das eine ähnliche Syntax wie Enumerable.Empty:
hat %Vor%Verwendet wie folgt:
%Vor%Tags und Links .net c# readonlycollection multi-value-dictionary