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

Rah*_*ury 3 .net c# oop

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

目前我在方法Math.Abs(Int)内部使用,但我希望错误在编译时.

Jon*_*eet 16

只需将参数设为a uint或a即可ushort.这将防止编译时的负面输入.它不会阻止0,但是...我假设你真的是在非负输入而不是严格正输入之后.

如果您的方法必须接受签名参数,那么:

  • 您可以验证参数值,如果它无效则抛出异常.(这比尝试"修复"无效输入好得多Math.Abs.)
  • 您可以使用代码约定向其他代码指示参数应该具有非负值,并且它将尝试证明在您调用方法的任何地方,该值将是非负的.这不会由C#编译器强制执行,但它仍然可以是构建时过程.

如果您使用异常方法,那么您还应该围绕调用方法的代码进行全面的单元测试 - 当然,该代码也应验证输入.

  • @Tigran肯定会的.给定`void f(uint x)`,它使`f(-1)`成为一个错误,并允许`f(0)`和`f(1)`. (3认同)