我想强制我的方法只接受一个整数参数,如果它是正面。如果方法传递否定整数,则应该抛出编译时错误。实现这一目标的最佳方法是什么?
目前我在方法中使用Math.Abs(Int)
,但我希望错误发生在编译时。
答案 0 :(得分:15)
只需将参数设为uint
或ushort
即可。这将防止编译时的负面输入。它不会阻止0,但是......我假设你真的是在非负输入而不是严格正输入之后。
如果你的方法有接受签名参数,那么:
Math.Abs
尝试“修复”无效输入更好。如果您使用异常方法,那么您还应该围绕调用方法的代码进行全面的单元测试 - 当然,该代码也应验证其输入。< / p>
答案 1 :(得分:1)
您可以使用Code Contracts(和link)并在编译之前进行静态代码分析,然后使用:
Contract.Requires( parameter >= 0 );
静态代码分析是有限的,您不应该限制代码契约(您仍然应该抛出运行时异常)。它会捕获明显的东西(比如传递常量),但是当它们来自代码外部时(从磁盘读取,从数据库中读取或其他任何东西),它们不会捕获负值。
这在编译时是不可能的