Как явно указать размер параметра массива, переданного функции

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

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

   //blah blah

}

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

Ответ 1

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

С Code Contracts вы можете выразить это в форме, с которой может помочь статический контролер:

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

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

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

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

Ответ 2

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

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

   //blah blah

}

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