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
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.
Count, upraszczając, robi foreach
a po całej tablicy, inkrementując w pętli jakiegoś x
a, 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.
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
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.
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 :).