2010-07-10 14 views
10

Tengo una función que acepta un parámetro llamado IV. ¿Hay alguna forma de que pueda especificar explícitamente el tamaño del parámetro IV como 16?Cómo especificar explícitamente el tamaño de un parámetro de matriz pasado a una función

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

    //blah blah 

} 

Lo anterior, por supuesto, no funciona. ¿Es posible? Sé que puedo verificarlo dentro de la función y lanzar una excepción, pero ¿se puede definir en la definición de la función?

+3

Tendría que crear una clase personalizada para eso. –

Respuesta

17

No puedes, básicamente. Como dice Jaroslav, podrías crear tu propio tipo, pero aparte de eso, estás atascado con solo lanzar una excepción.

Con Code Contracts se podría expresar esto en una forma que el corrector estática podría ayudar con:

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

A continuación, el de electricidad estática podría decirle en tiempo de compilación si se piensa que podría estar violando el contrato. Sin embargo, esto solo está disponible con las ediciones Premium y Ultimate de Visual Studio.

(Puede seguir utilizando contratos código sin el corrector estático con VS profesional, pero no obtendrá los contratos.)

enchufe: Actualmente el Código de Contratos capítulo de C# in Depth 2nd edition está disponible gratis para descargar, si quiero más información.

+0

Jon - Acabo de comprar su libro y tengo que decir que nunca había adquirido tanto conocimiento por $ 30. He preordenado también la segunda edición. Cosas increíbles! – Marko

+1

Nota: debe definir el símbolo de compilación 'CONTRACTS_FULL' (si no está ya definido), de lo contrario,' Contract.Requiere' no se compilará. –

+1

@Marko: Gracias, eso es un refrán encantador :) @Jaroslav: Sí, si va a usar Code Contracts de manera efectiva, realmente necesita descargar las herramientas que facilitan este tipo de cosas. –

5

No puede especificar el tamaño del parámetro de matriz en la declaración de método, como ha descubierto. La segunda mejor opción es para comprobar el tamaño y lanzar una excepción:

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

    //blah blah 

} 

Otra opción para crear una clase que envuelve byte[16] y pasar que a través.

Cuestiones relacionadas