Опубликовано
- 1 мин чтения
Используйте индексаторы вместо методов LINQ

Это часть серии, в которой я разбираю правила качества кода .NET с точки зрения производительности. Сегодня поговорим про CA1826: Use property instead of Linq Enumerable method.
Описание правила
Правило рекомендует не использовать методы First()
, Last()
, Count()
из LINQ с IReadOnlyList<T>
:
IReadOnlyList<string> list = ["str1", "str2", "str3"];
var first = list.First(); // CA1826
var last = list.Last(); // CA1826
var count = list.Count(); // CA1826
Вместо этого стоит использовать индексатор или свойство Count
:
IReadOnlyList<string> list = ["str1", "str2", "str3"];
var first = list[0];
var last = list[^1];
var count = list.Count;
Анализ производительности
Я написал простой бенчмарк, чтобы проверить, насколько LINQ действительно влияет на производительность. Результаты в репозитории и на диаграмме ниже.

График сравнения производительности между методами LINQ и индексатором и свойством Count
Как видно, разница есть. Но она совсем небольшая — всего несколько микросекунд на моём ноутбуке.
Стоит ли заморачиваться?
В большинстве случаев — нет. Прирост производительности минимальный. Но если вы пишете высокопроизводительный код или используете LINQ методы в цикле — возможно код стоит отрефакторить.