代码之家  ›  专栏  ›  技术社区  ›  rootpanthera

在编译时验证参数?

c#
  •  0
  • rootpanthera  · 技术社区  · 7 年前

    假设我有一个简单的函数:

    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检查器本身中正确输入值,从而消除了每秒多次调用该方法时不必要的检查(并降低了性能)。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Shelby115    7 年前

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

    NewNumber(x, y);
    

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

    您给出了硬编码的示例,也许您只能使用带有硬编码值的函数,但是编译器只知道 5 -5 是整数,整数可以是文本 5, -5, etc 或变量 var a = 5;

        2
  •  0
  •   Saravanan    7 年前

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