String.Count和String.Length有什么区别?

时间:2012-03-27 05:42:43

标签: c# string count

我正在交替使用它们,它们之间有什么区别吗?

5 个答案:

答案 0 :(得分:12)

从表面上看,它们看起来功能相同,但主要区别在于:

  • Length是一个由字符串定义的属性,是查找字符串长度的常用方法

  • .Count()是作为扩展方法实现的。也就是说,string.Count()真正做的是调用Enumerable.Count(this IEnumerable<char>)System.Linq扩展方法,因为string实际上是char s的序列。

尽管LINQ可枚举方法存在性能问题,但请使用Length,因为它内置于字符串中。

答案 1 :(得分:1)

String实现IEnumerable,因此它有一个方法Count,而Length是String类中的一个属性。

答案 2 :(得分:1)

String.Length是要使用的“正确”属性。 String.Count()只是IEnumerable<T>.Count()实施,可能会更慢。

答案 3 :(得分:1)

我很好奇Count和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旁边的注释中。我很惊讶Count比Speed更快。

随意进行自己的测试。

答案 4 :(得分:0)

这是related,可能会回答您的问题。你应该选择一个并坚持下去(在一个简单的字符串的情况下可能是长度)