Если вы заказываете перечисляемое с помощью компаратора, который не проверяет транзитивное сравнение, метод ElementAt возвращает другой порядок, чем фактическое перечисление (кроме ElementAt(0) оно перенаправляется в First(), который учитывает порядок).
Пример кода, чтобы опробовать его самостоятельно (NET framework 8.0):
Код: Выделить всё
public class UnitTest1
{
[Fact]
public void Test1()
{
List original = [2, 3, 1];
var sorted = original.Order(new MyComparer());
Assert.Equal("1,2,3", string.Join(',', sorted)); // succeeds, so it is sorted correctly, right? (nope)
var enumerator = sorted.GetEnumerator();
for (int i = 1; i
Подробнее здесь: [url]https://stackoverflow.com/questions/79256552/c-sharp-ienumerable-elementat-acting-unexpectedly-on-an-orderedenumerable[/url]