有没有一种可读的方法来检查 null 而不会被 == 覆盖[关闭]

问题描述 投票:0回答:2

C# 没有专用的引用相等运算符,而且不能重载,这一点一直困扰着我。为了测试引用是否为空,我想编写这样的代码:

if (thing == null)

但总是有这样一个挥之不去的想法:“如果类重载了 == 运算符怎么办?”。我对类是否认为该对象等于 null 不感兴趣。我感兴趣的是对象 reference 是否为空。替代方案似乎正在转向反对:

if ((object)thing == null)

和 Object.ReferenceEquals():

if (Object.ReferenceEquals(thing, null)) // long form
if (ReferenceEquals(thing, null)) // short form

有没有一种方法可以检查 null 而不必担心

==
是否在 C# 中被覆盖?

c# null
2个回答
6
投票

if (thing is object)
  ...

你混淆了你想做的事情 - 检查

null
。目前这对你来说可能是显而易见和干净的,但几个月后可能就不会了(假设你已经放弃了这种做法),而且对其其他人来说肯定“不”明显。如果我遇到这种情况,我会很困惑作者的意图。如果您需要评论来解释您所做的事情……请不要这样做。 (当然,在某些情况下您可以而且应该这样做,但绝对不是像 null 检查这样简单的事情。)

最终你会降低你的代码的可维护性,因为理解你的代码总是需要仔细考虑。帮自己一个忙,让你的代码尽可能干净,这意味着诚实地表达你的意图。


2
投票
我只是在寻找一种更具可读性的形式。

如果您追求简洁,那么扩展方法可能是您最好的选择。

public static class NullExtensions { public static bool ExactlyNull(this object toCheck) { return ReferenceEquals(toCheck, null); } }

老实说,我只是按原样使用

ReferenceEquals。使用这样的扩展方法往往会

降低
可维护性,并且通常会导致某些工具(例如 Resharper)提供不太有用的“建议”。

© www.soinside.com 2019 - 2024. All rights reserved.