繁体   English   中英

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

[英]Force a C# method to pass only positive parameters?

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

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

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

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

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

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

您可以在编译之前使用代码约定 (和链接 )并执行静态代码分析,然后使用:

Contract.Requires( parameter >= 0 );

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

这在编译时是不可能的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM