2009-01-12 9 views
5

Estoy terriblemente cansado de comprobar todos mis argumentos para null, y arrojar ArgumenutNullExceptions cuando lo son.Diseño por contrato/C# 4.0/evitando ArgumentNullException

Según tengo entendido, C# 4.0 permite algunos diseños mediante construcciones por contrato. ¿Será posible especificar que un método no aceptará argumentos nulos en C# 4.0?

Además, ¿hay algo que pueda hacer mientras tanto (tal vez un atributo?) Para evitar esta tarea monótona de comprobar nulo y tirar?

Respuesta

2

No estoy seguro acerca de las construcciones nativas de DbC en C# 4.0, pero Microsoft lanzará la biblioteca Contracts multilingüe.
Puede descargar la versión para MSVS2008 here.

1

Como alternativa a las respuestas ya dadas, vale la pena mirar en el Null Object design pattern.

La esencia de este patrón de diseño es que una vez que se crea el "objeto nulo", existe la necesidad de no más lejos para llevar a cabo cualquier comprobación de nulo y los métodos del objeto nulo implementan el comportamiento deseado siempre que se haya pasado un nulo (de lo contrario) frente a una referencia a un "objeto real".

Este patrón de diseño no depende de C# 4.0 y, de hecho, se puede implementar fácilmente en casi cualquier lenguaje de programación OO.

+0

Es un gran patrón, pero no impide que los llamantes pasen los valores nulos reales. –

4

Rick Brewster describe una buena solución para concisa parámetro, estilo declarativo comprobar en este post,

http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/

evita el uso de la reflexión (inconveniente de DBC) y crea ninguna sobrecarga para ruta de código no excepcional.

Me gusta cómo usa los métodos de extensión para permitir lo que parece ser llamadas de métodos de instancia en objetos nulos. Muy inteligente de codificación de IMO.

Si se vende en DbC, Google SpeC# y PostSharp.

Cuestiones relacionadas