2011-04-07 57 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)。