Diseño por contrato / C # 4.0 / evitando ArgumentNullException
-
10-07-2019 - |
Pregunta
Estoy terriblemente cansado de comprobar que todos mis argumentos son nulos y lanzar ArgumenutNullExceptions cuando lo están.
Según tengo entendido, C # 4.0 permite algunos diseños por construcciones contractuales. ¿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 monótona tarea de verificar nulos y arrojar?
Solución
Puede crear una clase genérica NotNull<T>
que ayude, pero hay algunos efectos secundarios. Consulte publicación de blog de Robert Nystrom .
Otros consejos
Rick Brewster describe una buena solución para la verificación concisa de parámetros de estilo declarativo en esta publicación,
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 no genera gastos generales para la ruta de código no excepcional.
Como utiliza métodos de extensión para permitir lo que parecen ser llamadas a métodos de instancia en objetos nulos. Muy inteligente codificación IMO.
Si se vende en DbC, Google Spec # y PostSharp.
Como alternativa a las respuestas ya dadas, vale la pena buscar en Null Object design pattern
.
La esencia de este patrón de diseño es que una vez que " objeto nulo " se crea, ya no es necesario realizar ninguna comprobación de nulo y los métodos del objeto nulo implementan el comportamiento deseado siempre que se hubiera 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 .
Acabo de comenzar a usar Code Contracts, es una nueva característica en C # 4.0, necesita descargar un complemento de MS para permitirle verlo en la configuración de su proyecto. Detalles aquí - & Gt; http://research.microsoft.com/en-us/projects/contracts/