当前位置: 首页 > 编程语言 > C#

BestWaytoCheckforNullParameters(GuardClause)分享

时间:2023-04-10 13:07:01 C#

BestWaytoCheckforNullParameters(GuardClause)例如,你通常不希望构造函数中的参数为空,所以你看到一些东西like这些东西很正常if(someArg==null){thrownewArgumentNullException(nameof(someArg));}if(otherArg==null){thrownewArgumentNullException(nameof(otherArg));}它会使代码有点混乱。有没有比这更好的方法来检查参数列表的参数?诸如“检查所有参数并抛出ArgumentNullException如果其中任何一个为空并为您提供为空的参数”之类的东西。顺便说一句,关于重复的问题陈述,这不是关于用属性或内置函数标记参数,而是关于某些调用GuardClauses以保证对象接收初始化的依赖项。publicstaticclassEnsure{//////确保指定的参数不为空。//////参数名称。///参数。[DebuggerStepThrough][ContractAnnotation("haltUsage://C#=6publicConstructor([NotNull]objectbar){Ensure.ArgumentNotNull(bar,nameof(bar));...}调试时激活DebuggerStepThroughAttribute非常方便(或者在异常后附加调试器时),我不会在ArgumentNotNull方法中,而是在实际发生空引用的调用方法中。我正在使用ReSharper合同注释。如果构造函数中的参数太多,你最好修改它们,但那是另一回事了。为了减少样板验证代码,许多人编写了这样的Guard实用程序类:}}//其他验证方法}(您可以添加Guard类可能需要的其他验证方法)。因此,只需要一行代码来验证参数:privatestaticvoidFoo(objectobj){Guard.ThrowIfNull(obj,"obj");}空引用是您必须提防的一种麻烦。然而,他们并不是唯一的。问题比这更广泛,归结为:该方法接受某种类型的实例,但它不能处理所有实例。换句话说,方法的域大于它处理的值集。然后使用Guard子句断言实参不属于方法域的“灰色地带”,无法处理。现在,我们有空引用,作为通常在可接受值集之外的值。另一方面,经常会发生集合的一些非空元素也是不可接受的(比如空字符串)。在这种情况下,可能会发现方法签名过于宽泛,表明存在设计问题。这可能导致重新设计,例如定义子类型,通常是派生接口,限制方法的范围并使一些保护子句消失。您可以在本文中找到示例:为什么我们需要保护条款?有一个名为Swissknife的nuget包。从nuget库安装Swissknife。它为您提供了许多选项,从以下方法开始,检查参数Argument.IsNotNullOrEmpty(args,"args")下的Swissknife.Diagnostics.Contracts命名空间和选项idoim等等。您可以设置Option_someVar,然后检查_someVar.IsSome或_SomeVar.IsNone。这也有助于对抗可空类。希望这可以帮助。您可以尝试使用“Heleonix.Guard”库来提供保护功能:https://github.com/Heleonix/Heleonix.Guard/blob/master/README.md您可以这样编写保护子句://C#7.2+:非尾随命名参数Throw.ArgumentNullException(when:param.IsNull(),nameof(param));//或//在C#7.2之前:您可以使用辅助方法'When'Throw.ArgumentNullException(When(param.IsNull()),nameof(param));//或Throw.ArgumentNullException(param==null,nameof(param));//或Throw.ArgumentNullException(When(param==null),nameof(param));它提供了许多现有的异常,你可以为自定义异常编写自定义扩展方法。此外,该库引用了“Heleonix.Extensions”库,该库具有IsNull、IsNullOrEmptyOrWhitespace、IsLessThan等预测扩展,可根据所需值检查您的参数或变量。与具有流畅接口的其他保护库不同,这些扩展不会生成中间对象,而且由于实现非常简单,因此它们具有高性能。以上就是C#学习教程:检查空参数的最佳方法(GuardClause)分享的全部内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注---本文来自网络收集,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: