Pergunta

Estou terrivelmente cansado de verificar todos os meus argumentos para null, e jogando ArgumenutNullExceptions quando eles estão.

Pelo que entendi, C # 4.0 permite algum projeto de construções de contrato. Será possível especificar que um método não aceita argumentos nulos em C # 4.0?

Além disso, há alguma coisa que posso fazer nesse meio tempo (talvez um atributo?) Para evitar esta tarefa monótona de verificação de nulos e jogando?

Foi útil?

Solução

Você pode criar um NotNull<T> classe genérica que ajuda, mas existem alguns efeitos colaterais. Consulte de Robert Nystrom blog .

Outras dicas

Rick Brewster descreve uma solução boa para concisa, estilo declarativo parâmetro de verificação neste post,

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

evita o uso de reflexão (desvantagem de DBC) e cria nenhuma sobrecarga para o caminho de código não excepcional.

Como a forma como ele usa os métodos de extensão para permitir que o que parece ser chamadas de método de instância em objetos nulos. bit muito inteligente de codificação IMO.

Se você é vendido em DbC, Google Spec # e PostSharp.

Não tenho certeza construções DBC nativas em C # 4.0 mas a Microsoft vai lançar cross-language Contratos biblioteca.
Você pode baixar a versão para MSVS2008 aqui .

Como uma alternativa para as respostas já dadas, vale a pena olhar para o Null Object design pattern.

A essência deste padrão de projeto é que uma vez que o "objeto nulo" é criado, não há mais necessidade de realizar qualquer verificação para nulo e os métodos do objeto nulo implementar o comportamento desejado sempre que um nulo (caso contrário) teria foi passado vs uma referência a um "objeto real".

Este padrão de projeto não depende de C # 4.0 e na verdade pode ser facilmente implementado em quase qualquer linguagem de programação OO .

Eu apenas comecei usando o Código de Contratos é um novo recurso do C # 4.0 você precisa baixar um suplemento de MS para permitir que você vê-lo em suas configurações do projeto. Detalhes aqui -> http://research.microsoft.com/en-us/projects/contracts/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top