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

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

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

   //blah blah

}

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

14
задан AakashM 10 July 2010 в 06:11
поделиться

2 ответа

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

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

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

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

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

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

19
ответ дан 1 December 2019 в 09:59
поделиться

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

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

   //blah blah

}

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

8
ответ дан 1 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: