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