2

文字列を比較するカスタム比較子の他の誰かのコードを見ています。

文字列パラメーターの少なくとも 1 つが null の場合、失敗することに気付きました。

比較は、比較の結果に基づいて -1、0、または 1 を返します。

このようなコードは、null を処理するように修正する必要がありますか? その場合、パラメーターの 1 つが null の場合、何を返す必要がありますか?

4

3 に答える 3

6

IComparer.Compare Method (MSDN)の備考セクションによると

null は任意の型と比較でき、IComparable を使用する場合は例外が生成されません。並べ替えの際、null は他のどのオブジェクトよりも小さいと見なされます。

つまり、次のことは理にかなっているようです。

  • どちらも null の場合は 0 を返す
  • x が null で y でない場合、-1 を返します (x < y)
  • y が null で x でない場合は、1 を返します (x > y)。
于 2011-04-07T01:43:55.387 に答える
1

答えは、最終的にはビジネス要件の結果になるはずです。

おそらく、コードは特定の一連の要件に合わせて作成されており、null は考慮されていませんでした。

次の場合は修正する必要があります。

  • あなたのビジネス要件はそれを必要とします
  • 入力がnullになる可能性はほとんどありません
  • あなたはそれのために欠陥を処理しています
  • 複数のコンポーネントがこの機能を利用しています
于 2011-04-07T01:36:41.650 に答える
1

比較子の目的にもよると思いますが、文字列の 1 つが null の場合に例外をスローするように比較子を変更することに傾倒します。これは、1 つの文字列が他の文字列より大きいか、等しいか、小さいかを返すという比較子の目的に反しているようです。Null はそのセットに収まりません。

于 2011-04-07T01:36:43.940 に答える