2010-11-11 18 views
6

¿Es posible en C# tener algún tipo de lista de verificación al compilar para asegurar que los parámetros de las funciones sean ciertos valores?¿Es posible verificar los valores en la compilación?

Por ejemplo, ¿puedo verificar que el parámetro de esta función sea siempre mayor que 10 en el momento de la compilación?

void SomeFunction (1); < --- Error de compilación aquí

+0

¿qué hay de escribir la condición de comprobación dentro de las funciones específicas? –

+0

Quiero comprobar el tiempo de compilación –

+0

Necesita un lenguaje con interacción en tiempo de compilación, como Scheme/LISP. Dicho esto, solo será bueno para constantes computables en tiempo de compilación. – leppie

Respuesta

6

Eche un vistazo a Code Contracts. Es bastante poderoso; se puede usar tanto para el control del tiempo de ejecución como para la verificación estática. Además, puede configurarlo para tratar los contratos no probados como advertencias/errores en tiempo de compilación.

void SomeFunction(int number) 
{ 
    Contract.Requires<ArgumentOutOfRangeException>(number > 10) 
    ... 
} 
+0

¡guau! eso es realmente, realmente ... ¡AGRADABLE! –

3

No sé de cualquier manera de hacer esto en tiempo de compilación, puede ser mejor usar una enumeración y sólo proporciona valores de esa enumeración que están por encima de 10.

Pero, por supuesto, esto te limita a valores específicos que pueden no ser lo que quieres.

hay otras opciones disponibles para usted, tales como:

  • error de ejecución, como lanzar una excepción.
  • runtime ignorar, como una declaración if que sale de la función para los valores que no están en su rango.

En caso de apuro, podría procesar el código fuente con otro ejecutable que examine los valores pasados ​​a su función, pero eso solo funcionará para las llamadas que pueden enviarse a un argumento constante. Y, si son argumentos constantes, los atrapará en el tiempo de ejecución durante la fase de prueba, mucho antes de que su producto se encuentre a menos de treinta metros de un cliente o un beta tester. A menos que su cobertura de prueba no esté a la altura pero ese es un problema diferente.

De lo contrario, la verificación del tiempo de ejecución es su única opción.

0

Si no es un programa muy simple, creo que esto es imposible. Suena relacionado con el Halting problem.

Cuestiones relacionadas