是否可以在编译时检查值?

时间:2010-11-11 06:34:38

标签: c#

在编译时,C#中是否可以有某种检查列表以确保函数的参数是否为某些值?

例如,我可以在编译时检查此函数的参数是否始终大于10?

void SomeFunction(1); < ---这里编译错误

3 个答案:

答案 0 :(得分:6)

看看Code Contracts。它非常强大;它可以用于运行时检查和静态验证。此外,您可以将其配置为将未经证实的合同视为编译时警告/错误。

void SomeFunction(int number)
{
   Contract.Requires<ArgumentOutOfRangeException>(number > 10) 
   ...
}

答案 1 :(得分:3)

我不知道在编译时有什么方法可以做到这一点,你可能最好使用枚举,只提供该枚举中超过10的值。

但是,当然,这限制了您可能不是您想要的特定值。

您可以使用其他选项,例如:

  • 运行时错误,就像抛出异常一样。
  • 运行时忽略,例如if语句退出函数以查找不在您范围内的值。

在紧要关头,您可以使用另一个可执行文件处理源代码,该可执行文件检查传递给您函数的值,但这仅适用于可以向下移动到常量参数的调用。并且,如果它们是不变的参数,那么在测试阶段,您将在运行时捕获它们,早在您的产品距离客户或beta测试仪的一百英尺之内。除非您的测试覆盖率不是最新的,否则这是一个不同的问题。

否则,运行时检查是您唯一的选择。

答案 2 :(得分:0)

如果这不是一个非常简单的程序,我认为这是不可能的。这听起来与Halting problem相关。