在编译时验证参数?

时间:2018-06-06 17:36:24

标签: c#

假设我有一个简单的功能:

public static int NewNumber(int lowestValue, int highiestValue) {}

我想要一些编译器检查参数是否正确。例如,在这种情况下,开发人员可能会错误地(或故意)调用这样的方法:

NewNumber(5, -5);

在这种情况下这是错误的 - 开发者撒了谎。

当然,我可以在方法中进行简单的检查:

 public static int NewNumber(int lowestValue, int highiestValue) {
       if (highiestValue <= lowestValue) {
           //Error
       }
   }

......它会完美地运作。但是,我很好奇开发人员在这种情况下是否可以做什么来限制这种行为,而无需在方法本身进行额外的检查。

编辑:找到解决方案但与C#无关

由于我在Unity工作,我最终会编写自定义检查器,因此可以在Unity Inspector本身中正确输入值,从而在每秒多次调用方法时消除不必要的检查(并降低性能)。 p>

2 个答案:

答案 0 :(得分:1)

我不相信这是可能的。考虑一下这种情况,

NewNumber(x, y);

xy是什么?编译器不一定知道输入是什么(例如x = Int32.Parse(Console.ReadLine());)。

您提供了硬编码示例,也许您可​​能只使用具有硬编码值的函数,但编译器只知道5-5是整数,而整数可以是文字{ {1}}或变量5, -5, etc

答案 1 :(得分:0)

我认为没有与编译器相关的参数参数检查。但是最好让你的方法中的参数检查(方法负责处理参数)并更好地记录它,这样调用者就知道应该将哪些数据传递给你的方法。