2

我正在查看其他人的代码,用于比较字符串的自定义比较器。

我注意到如果至少有一个字符串参数为空,它会翻倒。

比较根据比较结果返回 -1、0 或 1。

是否应该修复这样的代码来处理空值,如果是这样,如果其中一个参数为空,它应该返回什么?

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

答案将/应该最终是您的业务需求的结果。

很可能代码是根据特定的要求编写的,而空值不是考虑的一部分。

如果出现以下情况,则应修复:

  • 您的业​​务需求需要它
  • 你曾经有过输入为空的远程机会
  • 因为它你正在处理缺陷
  • 多个组件正在利用此功能
于 2011-04-07T01:36:41.650 回答
1

我想这取决于比较器的目的,但如果其中一个字符串为空,我会倾向于更改比较器以引发异常。这似乎违背了比较器的目的,即返回一个字符串是大于、等于还是小于另一个字符串。Null 不适合该集合。

于 2011-04-07T01:36:43.940 回答