在编译时,C#中是否可以有某种检查列表以确保函数的参数是否为某些值?
例如,我可以在编译时检查此函数的参数是否始终大于10?
void SomeFunction(1); < ---这里编译错误
答案 0 :(得分:6)
看看Code Contracts。它非常强大;它可以用于运行时检查和静态验证。此外,您可以将其配置为将未经证实的合同视为编译时警告/错误。
void SomeFunction(int number)
{
Contract.Requires<ArgumentOutOfRangeException>(number > 10)
...
}
答案 1 :(得分:3)
我不知道在编译时有什么方法可以做到这一点,你可能最好使用枚举,只提供该枚举中超过10的值。
但是,当然,这限制了您可能不是您想要的特定值。
您可以使用其他选项,例如:
if
语句退出函数以查找不在您范围内的值。在紧要关头,您可以使用另一个可执行文件处理源代码,该可执行文件检查传递给您函数的值,但这仅适用于可以向下移动到常量参数的调用。并且,如果它们是不变的参数,那么在测试阶段,您将在运行时捕获它们,早在您的产品距离客户或beta测试仪的一百英尺之内。除非您的测试覆盖率不是最新的,否则这是一个不同的问题。
否则,运行时检查是您唯一的选择。
答案 2 :(得分:0)
如果这不是一个非常简单的程序,我认为这是不可能的。这听起来与Halting problem相关。