Comments 6
Без подглядывания сразу увидел FirstOrDefault - не возвращает null как значение по умолчанию - для int это будет 0 - я прав?
Да, всё верно. FirstOrDefault возвращает default(TSource), а не null. TSource будет соответствовать типу элементов перечисления. В данном случае это int. Следовательно, если результирующая выборка будет пустой, в ind запишется 0, а не null. Это приведёт к тому, что проверка на null c использованием оператора '??' окажется бессмысленной. Как итог — метод вернёт 0 вместо -1.
1 место потенциально ещё две проблемы имеет - NRE если передали null и сортировка до where - это тоже плохо, хоть и конкретно на листе возможно ведёт себя корректно =)
На самом деле, весь этот метод вообще можно переписать в одну строку:
private static int CalculateClosestSpaceIndex(List<int> spaceIndices, int firstMatchIndex) =>
spaceInices.Where(item => item < firstMatchIndex).Cast<int?>().Max() ?? -1;
"Null check" в приватных методах делают редко - обычно подобная проверка происходит явно или неявно выше по стеку.
Как попасть в топ?
А можно не надо?
Топ-10 ошибок, найденных в C#-проектах за 2023 год