C# 什么';String.Count和String.Length之间的区别是什么?
我交替使用它们,它们之间有什么区别吗?字符串实现了C# 什么';String.Count和String.Length之间的区别是什么?,c#,string,count,C#,String,Count,我交替使用它们,它们之间有什么区别吗?字符串实现了IEnumerable,因此它有一个方法Count,而Length是String类中的一个属性。字符串。Length是要使用的“正确”属性String.Count()只是一个IEnumerable.Count()实现,可能会更慢。这是并且可能会回答您的问题。您应该选择一个并坚持使用它(可能是简单字符串的长度)从表面上看,它们在功能上是相同的,但主要区别在于: Length是字符串定义的属性,是查找字符串长度的常用方法 .Count()作为扩展方
IEnumerable
,因此它有一个方法Count
,而Length
是String类中的一个属性。字符串。Length
是要使用的“正确”属性String.Count()
只是一个IEnumerable.Count()
实现,可能会更慢。这是并且可能会回答您的问题。您应该选择一个并坚持使用它(可能是简单字符串的长度)从表面上看,它们在功能上是相同的,但主要区别在于:
是字符串定义的属性,是查找字符串长度的常用方法Length
作为扩展方法实现。也就是说,.Count()
真正做的是调用一个string.Count()
扩展方法,因为System.Linq
实际上是一个string
s序列char
尽管LINQ可枚举方法存在性能问题,但还是使用
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旁边的注释中。我很惊讶计数竟然比长度快
请随意做你自己的测试