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

发布于 2024-10-30 17:44:57 字数 146 浏览 1 评论 0原文

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

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

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

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

I'm looking at someone elses code for a custom comparer that compares strings.

I'm noticing that it will fall over if at least one of the string parameters is null.

The compare returns -1, 0 or 1 based on the result of the comparison.

Should code like this be fixed to handle nulls and if so what should it return if one of the parameters was null?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

毁梦 2024-11-06 17:44:57

根据 IComparer.Compare 方法 (MSDN )

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

即,以下内容似乎是合理的:

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

According to the remarks section of the IComparer.Compare Method (MSDN)

Comparing null with any type is allowed and does not generate an exception when using IComparable. When sorting, null is considered to be less than any other object.

I.e. the following seems sensible:

  • If they are both null, return 0
  • If x is null but not y, return -1 (x < y)
  • If y is null but not x, return 1 (x > y).
烧了回忆取暖 2024-11-06 17:44:57

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

代码可能是根据一组特定的要求编写的,并且空值不属于考虑范围。

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

  • 您的业务需求需要它
  • 您极有可能输入为空
  • 您正在处理缺陷,因为
  • 多个组件正在利用此功能

The answer will/should ultimately be a result your business requirements.

Likely the code was written to a certain set of requirements, and nulls weren't part of the consideration.

It should be fixed if:

  • your business requirements need it
  • you ever have the remote chance of the inputs being null
  • you're handling defects because of it
  • multiple components are leveraging this functionality
全部不再 2024-11-06 17:44:57

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

I guess it depends on the purpose of the comparer, but I would lean toward changing the comparer to throw an exception if one of the strings is null. It seems to go against the purpose of the comparer, which is to return whether one string is greater than, equal to, or lesser than the other string. Null doesn't fit into that set.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文