Анализатор обнаружил потенциальную ошибку: два раза подряд вызываются методы 'OrderBy' или 'OrderByDescending'. Результат такой сортировки может отличаться от ожидаемого.
Рассмотрим пример:
var seq = points.OrderBy(item => item.Primary)
.OrderBy(item => item.Secondary);
Допустим, программист хотел отсортировать коллекцию так, чтобы элементы были сгруппированы и отсортированы по 'Primary', а внутри каждая группа была отсортирована по 'Secondary'.
Но на самом деле элементы коллекции будут сгруппированы и отсортированы по 'Secondary', а внутри каждая группа будет отсортирована по 'Primary'.
Для получения ожидаемого поведения второй вызов 'OrderBy' следует заменить на вызов метода 'ThenBy'.
var seq = points.OrderBy(item => item.Primary)
.ThenBy(item => item.Secondary);
Используя два вызова 'OrderBy', получить предполагаемое поведение также можно, но для этого необходимо поменять вызовы местами:
var seq = points.OrderBy(item => item.Secondary)
.OrderBy(item => item.Primary);
Аналогичную ошибку можно допустить при написании кода с использованием синтаксиса запроса:
var seq = from item in points
orderby item.Primary
orderby item.Secondary
select item;
Код можно исправить следующим образом:
var seq = from item in points
orderby item.Primary, item.Secondary
select item;
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3078. |