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

12

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


相关链接:*IEnumerable Count()和Length的区别* - Peter Mortensen
5个回答

19

表面上看,它们似乎在功能上是相同的,但主要区别在于:

  • Length 是字符串的一个定义属性,通常用来获取字符串的长度。

  • .Count() 是作为扩展方法实现的。也就是说,string.Count() 实际上调用的是Enumerable.Count(this IEnumerable<char>),即一个属于 System.Linq 扩展方法的函数,因为 string 实质上是一个 char 序列。

尽管考虑到 LINQ 可枚举方法的性能问题,但仍然应该使用 Length,因为它已经内置在字符串中。


2

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


2

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


1
我对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旁边的注释中。我很惊讶Count竟然比Length更快。
随意进行你自己的测试。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接