Как явно указать размер параметра массива, передаваемого в функцию - PullRequest
13 голосов
/ 10 июля 2010

У меня есть функция, которая принимает параметр с именем IV. В любом случае, можно ли явно указать размер параметра IV равным 16?

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

   //blah blah

}

Выше, конечно, не работает. Является ли это возможным? Я знаю, что могу проверить это внутри функции и выдать исключение, но можно ли это определить в определении функции?

Ответы [ 2 ]

19 голосов
/ 10 июля 2010

Вы не можете, в основном. Как говорит Ярослав, вы можете создать свой собственный тип, но кроме этого, вы застряли в простом исключении.

С Кодовыми контрактами вы можете выразить это в форме, с которой может помочь статическая проверка:

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

Тогда статический контролер может сообщить вам во время сборки, если он считает, что вы нарушаете контракт. Это доступно только в версиях Visual Studio Premium и Ultimate.

(Вы по-прежнему можете использовать кодовые контракты без статической проверки с VS Professional, но вы не получите контракты.)

Plug: В настоящее время глава Code Contracts из C # в Depth 2nd edition доступна для бесплатной загрузки, если вам нужна дополнительная информация.

7 голосов
/ 10 июля 2010

Вы не можете указать размер параметра массива в объявлении метода, как вы обнаружили. Следующая лучшая вещь - проверить размер и сгенерировать исключение:

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

   //blah blah

}

Еще один вариант - создать класс, который обернет byte[16] и передаст его.

...