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

Ran*_*ray 14 c# size parameters types function

我有一个接受名为IV的参数的函数.无论如何,我可以明确指定参数IV的大小为16吗?

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

   //blah blah

}
Run Code Online (Sandbox Code Playgroud)

以上当然不起作用.可能吗?我知道我可以在函数内部检查并抛出异常但是可以在函数定义中定义吗?

Jon*_*eet 19

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

使用代码合同,您可以用静态检查器可以帮助的形式表达:

Contract.Requires(inputIV.Length == 16);
Run Code Online (Sandbox Code Playgroud)

然后,静态检查程序可以在构建时告诉您它是否认为您可能违反了合同.这仅适用于Visual Studio的Premium和Ultimate版本.

(您仍然可以在没有VS Professional的静态检查程序的情况下使用代码合同,但是您将无法获得合同.)

插件:如果您想了解更多信息,目前可以免费下载深度第2版C#的Code Contracts章节.


Ode*_*ded 8

您已经发现,无法在方法声明中指定数组参数的大小.接下来最好的事情是检查大小并抛出异常:

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

   //blah blah

}
Run Code Online (Sandbox Code Playgroud)

另一种选择是创建一个包装byte[16]并传递它的类.