2010-12-09 3 views
3

Um die Anzahl der Unterpunkte in dotnet zu bekommen, muss ich manchmal eine Eigenschaft verlangen. Manchmal muss ich eine Eigenschaft Count fragen..net Namenskonvention: Gibt es einen semantischen Unterschied zwischen Länge und Anzahl?

Gibt es einen Grund für die Unterscheidung?

Beispiel:

int[] a; if (a.Length == 0) .... 
    IList<int> b; if (b.Count == 0) .... 

Hinweis Difference between IEnumerable Count() and Length ähnlich klingt, aber die semantischen zwischen Länge nicht antwortet und Graf

+0

sehen Sie dies in der Tat: http://StackOverflow.com/Questions/300522/count-VS-Length-VS-Size-in-A-Collection – nawfal

Antwort

2

Es gibt keinen semantischen Unterschied. Es ist nur ein Framework Design-Detail, mit dem wir uns befassen sollten.

2

Length eine Array-Eigenschaft ist, Count ein ICollection ein und Count() ein Verfahren auf IEnumerable, aber abgesehen daraus meinen sie dasselbe.

Das heißt, sie enthalten die Anzahl der Elemente in der Sammlung.

Hinweis: Im Fall IEnumerable kann (und wird normalerweise) die Methode Count() über alle Elemente in der Sammlung iterieren, um eine Anzahl zu erhalten. Die Eigenschaften geben einfach einen Wert zurück.

+1

Count ist keine * Eigenschaft * von IEnumerable, es ist eine Methode dort . –

+0

@Hans - Ich dachte über 'IList' – Oded

+0

Graf wird von IList von ICollection –

5

Ich kann keine Quelle angeben, aber ich denke, dass eine .Length ist ein fester Wert und ein .Count kann sich ändern.

Sie können die Anzahl der Elemente in einem Array nicht ändern, nachdem es erstellt wurde, so dass es eine .Length hat.

Sie können hinzufügen (oder entfernen) eine List, so dass ein .Count hat.

EDIT
So ein .Length:

  • Wird nicht für dieses Objekt ändern
  • nur eine schnelle Suche eines internen Wert beinhalten sollte

Während ein .Count oder .Count():

  • könnte für dieses Objekt ändern
  • könnte eine Iteration über die inneren Elemente (abhängig von der Implementierung)
+0

+1. Das ist wahr. Das Gleiche gilt für Java. – Aliostad

+0

Klingt vernünftig. Gleiches gilt für string.Length, da die Zeichenfolge nicht geändert werden kann. Der Stringbuilder ist veränderbar, hat jedoch die Eigenschaft Length – k3b

3

semantisch eine Anordnung hat eine konstante Anzahl von Elementen, hat es eine Länge daher beinhalten Die Eigenschaft heißt Länge. Eine Liste hat eine variable Anzahl von Elementen, und wenn Sie wissen möchten, wie viele Elemente vorhanden sind, müssen Sie zählen ihnen, daher der Count-Name.

1

Ich kann mich erinnern, die Framework Design Guidelines enthält eine Anmerkung über diesen Unterschied (ich werde morgen bei einer Qoutes). Ich erinnere mich, dass die Designer denken, dass das eine Eigenart im Design ist, weil es für viele Entwickler keinen Sinn ergibt. Denken Sie daran, dass es am Anfang keine Entwurfsrichtlinien für .NET und viele andere gab.NET API wurde aus Java kopiert, einschließlich der Macken.

Verwandte Themen