强制 C# 方法只传递正参数?

Force a C# method to pass only positive parameters?

我想强制我的方法只接受整数参数,如果它是 正数。如果向该方法传递一个 negative 整数,它应该抛出一个编译时错误。实现此目标的最佳方法是什么?

目前我在方法中使用Math.Abs(Int),但我希望在编译时出现错误。

只需将参数设置为 uintushort。这将防止编译时的负输入。它不会阻止 0,但是......我假设你真的在非负输入之后而不是严格的正输入。

如果您的方法必须接受带符号的参数,那么:

  • 您可以验证参数值,如果无效则抛出异常。 (与使用 Math.Abs 尝试 "fix" 无效输入相比,这是一个 好主意。)
  • 您可以使用 Code Contracts 向其他代码指示该参数应具有非负值,并且它会尝试证明无论您在哪里调用该方法,该值都将是非负值。这不会由 C# 编译器强制执行,但它仍然可以是构建时过程。

如果您采用异常方法,那么您还应该围绕调用您的方法的代码进行一组全面的单元测试 - 并且该代码还应该验证 its 输入,当然。

您可以使用Code Contracts (and link) 并在编译前进行静态代码分析,然后使用:

Contract.Requires( parameter >= 0 );

静态代码分析是有限的,您不应仅限于代码契约(您仍应抛出运行时异常)。它会捕获明显的东西(比如传递常量),但不会捕获来自代码外部的负值传递(从磁盘、数据库或其他任何地方读取)。

这在编译时是不可能的