Warum generic ICollectionT einige nicht-generische Schnittstellen mit der Count-Eigenschaft nicht erbt?

8

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%     
TN. 26.02.2014, 12:43
quelle

2 Antworten

3
  

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.

%Vor%     
hazzik 06.03.2014, 01:34
quelle
-1

Am besten kann ich das vorschlagen. Hinweis (Wie in Kommentaren erwähnt, kann Ienumerable unendlich sein)

%Vor%

Bearbeiten: Sie können "int" durch Int64 ersetzen:)

    
Jurion 27.02.2014 04:58
quelle

Tags und Links