Использую их поочередно, есть ли между ними разница?
В чем разница между String.Count и String.Length?
Ответы (5)
На первый взгляд функционально они кажутся идентичными, но главное отличие состоит в следующем:
Length
- это свойство, которое определяется строк и является обычным способом определения длины строки..Count()
реализован как метод расширения. То есть на самом делеstring.Count()
вызываетEnumerable.Count(this IEnumerable<char>)
метод расширенияSystem.Linq
, учитывая, чтоstring
на самом деле является последовательностьюchar
.
Несмотря на проблемы производительности перечисляемых методов LINQ, вместо этого используйте Length
, поскольку он встроен прямо в строки.
String реализует IEnumerable
, поэтому у него есть метод Count
, а Length
- это свойство в классе String.
Мне было любопытно узнать о разнице в скорости между Count и Length. Я верил, что Length будет быстрее ...
Я создал простой скрипт в LinqPad, чтобы проверить это:
Stopwatch timer = new Stopwatch();
string SomeText = @"";
bool DoLength = true;
//DoLength = false;
if (DoLength) //1252
{
timer.Start();
SomeText.Length.Dump("Length");
timer.Stop();
timer.ElapsedTicks.Dump("Elapsed");
}
else //1166
{
timer.Start();
SomeText.Count().Dump("Count");
timer.Stop();
timer.ElapsedTicks.Dump("Elapsed");
}
Я добавил длинную строку текста, чтобы проверить это в SomeText. Я заметил, что мне пришлось проводить их по отдельности, чтобы получить более точные результаты во втором тесте. Работа в тандеме всегда приводила к более быстрому ответу на второй вызов. (Если удалить комментарий для DoLength, будет запущен счетчик).
Я помещаю свои результаты в комментарии рядом с if или else. Я был удивлен, что Граф оказался быстрее Длины.
Не стесняйтесь делать свои собственные тесты.
String.Length
- это "правильное" свойство для использования. String.Count()
- это всего лишь IEnumerable<T>.Count()
реализация, которая могла бы быть медленнее.
Это связано и может ответить на ваш вопрос. Вы должны выбрать один и придерживаться его (возможно, длина в случае простой строки)