Jaka jest różnica między Length a Count()

0

Witam chciałbym się zapytać jaka jest różnica miedzy Length a Count() w c# ?? Czy użyję jednej czy drugiej metody zwraca mi poprawny wynik... np przy zliczaniu znaków

1

Pierwsze to właściwość klasy Array, drugie to uniwersalna metoda rozszerzająca dla wszystkiego co jest IEnumerable. Wyniki są takie same, ale nie ma sensu wołać Count() na tablicy, bo ani to czytelne, ani wydajne.

0

Count, upraszczając, robi foreacha po całej tablicy, inkrementując w pętli jakiegoś xa, i w ten sposób otrzymuje liczbę elementów. Wcale to nie fajne w przypadku zwykłej tablicy, która ma Length które zwróci rozmiar od razu.

1

Wyniki są takie same, ale nie ma sensu wołać Count() na tablicy, bo ani to czytelne, ani wydajne.

Nie jest tak wydajne jak bezpośrednie odwołanie do właściwości .Count, ale nie tak mało wydaje jak się wydaje - w IEnumerable<T>.Count() czy check czy argument jest kolekcją (a tablica jest) i zwracane ICollection(<T>).Count.

http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs#1191

2
Rev napisał(a):

Wyniki są takie same, ale nie ma sensu wołać Count() na tablicy, bo ani to czytelne, ani wydajne.

Nie jest tak wydajne jak bezpośrednie odwołanie do właściwości .Count, ale nie tak mało wydaje jak się wydaje

Więc jaki jest zysk z użycia Count() w tym wypadku? Bo ja po prostu nie widzę sensu w wykonywaniu niepotrzebnych operacji, nawet jeśli jest ich niewiele.

Dla Count() widzę dwa sensowne zastosowania - albo wołanie na czystym IEnumerable albo zliczanie na podstawie jakiegoś kryterium podanego w argumencie.

0
somekind napisał(a):
Rev napisał(a):

Wyniki są takie same, ale nie ma sensu wołać Count() na tablicy, bo ani to czytelne, ani wydajne.

Nie jest tak wydajne jak bezpośrednie odwołanie do właściwości .Count, ale nie tak mało wydaje jak się wydaje

Więc jaki jest zysk z użycia Count() w tym wypadku? Bo ja po prostu nie widzę sensu w wykonywaniu niepotrzebnych operacji, nawet jeśli jest ich niewiele.

Dla Count() widzę dwa sensowne zastosowania - albo wołanie na czystym IEnumerable albo zliczanie na podstawie jakiegoś kryterium podanego w argumencie.

Nigdy nie pisałem, że jest inaczej :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1