A question, опубликованный ранее, заставил меня задуматься. Если бы Any()
и Count()
выполнялись аналогично при использовании в пустом списке?
Как описано здесь, оба должны пройти те же шаги GetEnumerator()/MoveNext()/Dispose()
.
Я проверил это, используя быструю программу на LINQPad:
static void Main()
{
var list = new List<int>();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 10000; i++)
list.Any();
stopwatch.Stop();
Console.WriteLine("Time elapsed for Any() : {0}", stopwatch.Elapsed);
stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 10000; i++)
list.Count();
stopwatch.Stop();
Console.WriteLine("Time elapsed for Count(): {0}", stopwatch.Elapsed);
}
И общий результат, похоже, указывает на то, что Count()
быстрее в этой ситуации. Почему это?
Я не уверен, правильно ли я получил бенчмарк, я был бы признателен за любую коррекцию, если бы не было.
Изменить: я понимаю, что это будет иметь большее значение семантически. Первая ссылка, которую я опубликовал в этом вопросе, показывает ситуацию, когда имеет смысл использовать Count()
непосредственно, поскольку значение будет использовано, поэтому вопрос.