字符串的自定义比较器是否应允许空值

时间:2011-04-07 01:31:26

标签: c# asp.net compare icomparer custom-compare

我正在寻找一个用于比较字符串的自定义比较器的别人代码。

我注意到,如果至少有一个字符串参数为null,它将会失效。

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

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

3 个答案:

答案 0 :(得分:6)

根据IComparer.Compare Method (MSDN)

的备注部分
  

允许将null与任何类型进行比较,并且在使用IComparable时不会生成异常。排序时,null被认为小于任何其他对象。

即。以下似乎是明智的:

  • 如果它们都为null,则返回0
  • 如果x为null但不是y,则返回-1(x
  • 如果y为null但不是x,则返回1(x> y)。

答案 1 :(得分:1)

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

可能代码是针对某些需求编写的,而null则不是考虑因素的一部分。

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

  • 您的业务需求需要它
  • 您输入的空间很小
  • 因为它而处理缺陷
  • 多个组件正在利用此功能

答案 2 :(得分:1)

我想这取决于比较器的用途,但如果其中一个字符串为null,我会倾向于更改比较器以抛出异常。它似乎违背了比较器的目的,即返回一个字符串是否大于,等于或小于另一个字符串。 Null不适合那个集合。