カスタム IComparer の使用
Linq では、OrderBy メソッドはデフォルトで要素の自然な順序を使用します。ただし、特定の書式設定を持つ文字列などの複雑なデータ型を扱う場合、カスタム IComparer
そのようなシナリオの 1 つは、請求書番号のリストを「yyyyMMdd/nn」形式で並べ替えることを含みます。デフォルトの順序付けでは、数字と英数字の両方が存在するため、不正確な結果が生成されます。
カスタム比較関数 MyComparer が作成され、請求書番号を各部分に解析し、それに基づいて並べ替えられます。ただし、MyComparer の初期実装では、請求書番号の個々のコンポーネントを文字列として比較するだけです。この結果、請求書番号は数値ではなく辞書順に並べ替えられます。
MyComparer の修正バージョンでは、請求書番号の構成要素を比較する前に整数に変換し、予想される番号順で並べ替えが行われるようにします。これは、int.Parse() を使用して文字列を整数に変換することによって実現されます。
さらに、ApplySortCore メソッドで行われた変更を反映するには、項目リストを BindingList< の Items プロパティに再度割り当てる必要があります。 T>:
this.Items = items;
これらの変更により、MyComparer は請求書番号を目的の順序で正しく並べ替えます。順序に従ってバインディング リストが更新されるようにします。
以上がカスタム IComparer は、非標準の文字列ソートのために Linq OrderBy をどのように強化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。