In der generischen .NET-Schnittstelle ICollection<T>
hat die Eigenschaft Count
selbst. Es erbt jedoch keine nicht generische Schnittstelle mit einer Count
-Eigenschaft.
Wenn Sie nun die Anzahl der nicht generischen IEnumerable
ermitteln möchten, müssen Sie überprüfen, ob ICollection
implementiert ist. Wenn nicht, müssen Sie reflection verwenden, um zu ermitteln, ob die generische ICollection<X>
implementiert ist. da Sie das generische Argument X
nicht kennen.
Wenn ICollection<T>
nicht direkt von ICollection
erben kann, warum ist nicht eine andere nicht-generische Schnittstelle mit Count
-Eigenschaft nur?
Ist es nur schlechte Design-Wahl?
UPDATE : Um die Frage klarer zu machen, demonstriere ich das Problem in meiner aktuellen Implementierung:
%Vor%Ist es nur schlechte Design-Wahl?
Wahrscheinlich ist die Antwort ja .
Und um dieses Problem in .NET 4.5 zu lösen, hat MS die IReadOnlyCollection<out T>
Schnittstelle eingeführt, die kovariant ist für Referenztypen.
So können Sie Ihren Code wie folgt umschreiben
%Vor% Als letztes Mittel können Sie items
auf dynamisches Objekt anwenden und Count
Eigenschaft dynamisch aufrufen.
Tags und Links .net c# generics collections