2013-03-18 9 views
8

Ho letto oggi sui contratti di codice C# 4.0. Sembra che la pratica comune per la convalida di un parametro a un metodo non è nullo è il seguente:Contratti di codice C# - evitando il controllo dei parametri per riferimenti null

Contract.Requires(p != null); 

Tuttavia sembra abbastanza ragionevole per me che avrei dovuto fare questo per ogni parametro di ogni metodo di interfaccia nel mio codice. Nella stragrande maggioranza dei casi, i parametri non dovrebbero essere nulli. Mi aspetterei che ci sarebbe una sorta di meccanismo che consente di definire alcuni parametri specifici come "consentiti" come null (analogamente all'annotazione "@Nullable" in Java) e che il framework Contracts garantirà automaticamente che il resto non sia nullo.

Oltre a risparmiare molto tempo su questo "standard di controllo" (oltre a molte "Classi di contratti", poiché semplicemente non ci sono condizioni da verificare tranne che per parametri non nulli), farà anche il codice dei contratti è più pulito e più "orientato alla logica".

La mia domanda è, c'è un modo per farlo, e se no, dove non c'è uno, o forse perché il mio approccio qui è sbagliato?

+0

Sarebbe stato utile, ma non esiste una scorciatoia per farlo perché nessuno ha modificato la specifica della lingua per fornirne una e poi l'ha implementata e rilasciata. Vedi la risposta di Eric Lippert a una domanda simile qui: http://stackoverflow.com/questions/2806894/why-c-sharp-doesnt-implement-indexed-properties –

+0

Puoi usare il frammento di 'crn' per generare automaticamente lo standard per queste istruzioni non nulle, che riducono leggermente la digitazione. –

risposta

1

Non sono d'accordo, null è molto utile quando è necessario controllare se qualcosa non è stato ancora inizializzato, oppure i dati non sono stati trovati, ea volte vorrai passare null a un metodo e il suo fine, il i contratti di codice sono validi per i metodi comuni che servono molte classi e per le definizioni API. Se si scrive in un'architettura a livelli, è sufficiente proteggere le interazioni tra i livelli e si è al sicuro all'interno di ogni livello.

il tuo dominio ha i valori null, ed è ok.

+0

Lo fraintendi. Chiede perché non esiste una scorciatoia per dire che un parametro non può essere nullo. –

+0

"o forse perché il mio approccio qui è sbagliato?" –

+1

Mi spiace, quello che avrei dovuto dire è: chiede perché i valori nulli non sono disabilitati di default, ma con una scorciatoia per dire che un parametro * è * permesso di essere nullo. Ha sicuramente ragione che il caso normale è che i null NON sono ammessi (almeno, nella mia esperienza). –

Problemi correlati