В чем разница между String.Count и String.Length?

Использую их поочередно, есть ли между ними разница?


person Patryk    schedule 27.03.2012    source источник


Ответы (5)


На первый взгляд функционально они кажутся идентичными, но главное отличие состоит в следующем:

  • Length - это свойство, которое определяется строк и является обычным способом определения длины строки.

  • .Count() реализован как метод расширения. То есть на самом деле string.Count() вызывает Enumerable.Count(this IEnumerable<char>) метод расширения System.Linq , учитывая, что string на самом деле является последовательностью char.

Несмотря на проблемы производительности перечисляемых методов LINQ, вместо этого используйте Length, поскольку он встроен прямо в строки.

person BoltClock    schedule 27.03.2012

String реализует IEnumerable, поэтому у него есть метод Count, а Length - это свойство в классе String.

person abhinav    schedule 27.03.2012

Мне было любопытно узнать о разнице в скорости между 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. Я был удивлен, что Граф оказался быстрее Длины.

Не стесняйтесь делать свои собственные тесты.

person Brad    schedule 25.04.2017

String.Length - это "правильное" свойство для использования. String.Count() - это всего лишь IEnumerable<T>.Count() реализация, которая могла бы быть медленнее.

person itsme86    schedule 27.03.2012

Это связано и может ответить на ваш вопрос. Вы должны выбрать один и придерживаться его (возможно, длина в случае простой строки)

person Oleksi    schedule 27.03.2012