Nunit: 逐步淘汰 Guard 类

创建于 2018-09-24  ·  4评论  ·  资料来源: nunit/nunit

ReSharper 和(近年来)Visual Studio 建议插入 ArgumentNullException 和类似的参数检查。 正是因为这种肌肉记忆,我已经多次将它们引入代码库了。

从流控制分析的角度来看,直接抛出是更惯用的 C#。 C# 编译器知道,如果您使用throw而不是Guard ,则无需在使用前返回值或初始化变量,也无需从 switch case 中中断。 ReSharper 的空流检查也是如此。

此外,在 C# 7.0 中,throw 表达式可以很方便。 例如,语法_foo = foo ?? throw new ArgumentNullException(nameof(Foo));

允许贡献者和我们自己直接抛出异常而不是使用 Guard 的其他优点或缺点是什么?

最有用的评论

我个人喜欢警卫班-但我同意存在可发现性问题。 我通常会向常规贡献者推荐它,但不会向一次性贡献者提及它。 我不认为这是我们特别需要一致性的领域,是吗? 当它在那里时我很高兴看到它,但当它不在时我并不担心。

我对这个问题的结果相当冷漠,无论哪种方式对我来说都很好😊

所有4条评论

如果我没记错的话,使用Guard类的主要优点是易于使用。 在支持 C# 的 IDE 中,对于我或新的贡献者来说,它不再是最简单的选择。 我们需要一致性,一种方式还是另一种方式? 一致性将我们中的一些人最容易的事情与(可能)对我们其他人最容易的事情进行对比。

我个人喜欢警卫班-但我同意存在可发现性问题。 我通常会向常规贡献者推荐它,但不会向一次性贡献者提及它。 我不认为这是我们特别需要一致性的领域,是吗? 当它在那里时我很高兴看到它,但当它不在时我并不担心。

我对这个问题的结果相当冷漠,无论哪种方式对我来说都很好😊

我对此也有些无动于衷。 它确实提供了异常构造函数的一致性和正确用法(我已经多次看到消息和参数名称),但它也向调用堆栈添加了一个额外的方法。 另外,正如您所说,新的 C# 语法使它更容易。

我不确定我们是否需要大规模清除,但我不需要它就可以了。

谢谢大家,听起来不错!

此页面是否有帮助?
0 / 5 - 0 等级