Sort メソッドを実行すると "Unable to sort because the IComparer.Compare() method returns inconsistent results." エラーが発生する

Sort メソッドを実行すると "Unable to sort because the IComparer.Compare() method returns inconsistent results." エラーが発生する現象の原因と対処法を紹介します。

現象の確認

Listオブジェクトなどで、Sortメソッドを実行すると以下の例外が発生します。

エラーメッセージ
System.ArgumentException: 'Unable to sort because the IComparer.Compare() method returns inconsistent results. 
Either a value does not compare equal to itself, or one value repeatedly compared to another value yields different results.
IComparer: 'System.Comparison 1[(モジュール名)]'.'


再現できる場合と再現しない場合があるため、原因の特定が難しいエラーです。

原因

Sortメソッド実行の際のカスタムソートのロジックが複雑で、比較をした際に前回の比較と異なる値を返す場合に上記のエラーが発生します。
ただし、Listオブジェクトに投入されている要素の個数や要素の値により、同じアイテムを2度比較しないでソート処理が完了する場合は、この例外は発生しないため、 ある時点のデータでは例外が発生していたにもかかわらず、その後のデータ更新により例外が発生しなくなる場合があります。

対処法

ロジックを見直し、同じ値同士の比較では常に同じ比較結果を返すようにします。


AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2024-01-18
Copyright © 1995–2025 iPentec all rights reserverd.