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

时间:2010-07-10 06:09:26

标签: c# function parameters types size

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

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

   //blah blah

}

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

2 个答案:

答案 0 :(得分:19)

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

使用Code Contracts,你可以用静态检查器可以帮助的形式表达:

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

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

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

插件:如果您需要更多信息,目前可以免费下载C# in Depth 2nd edition中的代码合同章节。

答案 1 :(得分:7)

您无法在方法声明中指定数组参数的大小,如您所发现的那样。接下来最好的方法是检查大小并抛出异常:

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

   //blah blah

}

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