2011-04-07 71 views
2

我期待在该比较字符串自定义比较别人的代码。如果字符串自定义比较允许空值

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

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

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

+2

作为参考点,在Java中,['String'](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/ lang/String.java#String.compareTo%28java.lang.String%29)假定参数非空。 – 2011-04-07 01:35:18

+0

[我怎样才能使我的通用比较器(IComparer)处理空值?](http://stackoverflow.com/questions/4852432/how-can-i-make-my-generic-comparer-icomparer-handle-空) – jtbandes 2016-05-30 16:51:15

回答

1

答案最终会成为您业务需求的结果。

可能代码是写入一定的需求集合,而空值不是考虑的一部分。

它应该是固定的,如果:

  • 您的业务需求需要
  • 你曾经有输入被空
  • 偏远的机会,你正在处理,因为它
  • 多个缺陷组件正在利用此功能
1

我想这取决于比较器的目的,但我认为ð精益朝着改变比较器抛出一个异常,如果其中一个字符串为空。这似乎违背比较器,这是返回一个字符串是否比高于其他字符串大于,等于,或更小的目的。空不适合那一套。

6

根据的IComparer.Compare Method (MSDN)

比较空与任何类型的备注部分是允许的,使用了IComparable时不会产生异常。排序时,null被认为比任何其他对象都少。

I.e.以下似乎是合理的:

  • 如果它们都为null,则返回0
  • 如果x为空,但不是Y,返回-1(x < Y)
  • 如果Y不存在,但不是X,回报1(X> Y)。