代码之家  ›  专栏  ›  技术社区  ›  Ranhiru Jude Cooray

如何显式指定传递给函数的数组参数的大小

  •  10
  • Ranhiru Jude Cooray  · 技术社区  · 14 年前

    我有一个函数,它接受一个名为IV的参数。我是否可以显式地将参数IV的大小指定为16?

    public AESCBC(byte[] key, byte[16] inputIV)
    {
    
       //blah blah
    
    }
    

    以上这些当然是行不通的。有可能吗?我知道我可以在函数中检查它并抛出异常,但是它可以在函数定义中定义吗?

    2 回复  |  直到 14 年前
        1
  •  20
  •   Jon Skeet    14 年前

    基本上你不能。正如Jaroslav所说,您可以创建自己的类型—但除此之外,您只能抛出一个异常。

    Code Contracts 您可以用静态检查器可以帮助的形式来表示:

    Contract.Requires(inputIV.Length == 16);
    

    (您仍然可以在没有VS Professional的静态检查器的情况下使用代码契约,但是您将无法获得契约。)

    插件:当前代码从 C# in Depth 2nd edition 如果您需要更多信息,可以免费下载。

        2
  •  10
  •   Matthieu kelly    5 年前

    正如您所发现的,您不能在方法声明中指定数组参数的大小。下一个最好的方法是检查大小并引发异常:

    public AESCBC(byte[] key, byte[] inputIV)
    {
       if(inputIV.Length != 16)
           throw new ArgumentException("inputIV should be byte[16]");
    
       //blah blah
    
    }
    

    另一个选项是创建一个包装 byte[16]