【问题标题】:Should a custom comparer for strings allow for null values字符串的自定义比较器是否应该允许空值
【发布时间】:2011-04-07 01:31:25
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

根据IComparer.Compare Method (MSDN)的备注部分

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

即以下似乎是明智的:

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

【讨论】:

    【解决方案2】:

    答案将/应该最终取决于您的业务需求。

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 2012-11-15
        • 1970-01-01
        • 2014-10-02
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        相关资源
        最近更新 更多