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?

¿Fue útil?

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.

No estoy seguro acerca de las construcciones nativas de DbC en C # 4.0, pero Microsoft lanzará el lenguaje cruzado Contratos biblioteca.
Puede descargar la versión para MSVS2008 aquí .

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/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top