Domanda

Sto tornando una classe anonima:

var clients = from c in this.ClientRepository.SearchClientByTerm(term, 10)
    select new
    {
       id = c.Id,
       line1 = c.Address.Line1 ?? "Unknown Information ..."
    };

Il problema è l'indirizzo è annullabile che significa che se si tratta di nulla esplode in mille pezzi.

La soluzione più elegante che riuscivo a pensare era questo ...

    line1 = c.Address != null && c.Address.Line1 != null 
               ? c.Address.Line1 : "Unknown Information ..."

C'è un modo migliore ?, non mi piace perdere la capacità di utilizzare l'operatore null-coalescenza e poi dover verificare se nullo.

È stato utile?

Soluzione

L'unico modo più pulito che posso pensare è quello di modificare il getter della proprietà Address per non tornare mai più nulla, o che hanno la funzione di costruzione sempre inizializzare il Address. In caso contrario, è sempre necessario verificare la presenza di nulla.

Altri suggerimenti

Potevo solo pensare a questo:

line1 = c.Address.HasValue ?  c.Address.Line1.HasValue ? c.Address.Line1 : "Line1 unknown." : "Address unknown."

Si potrebbe anche modificare il vostro get proprietà Indirizzo {} metodo per verificare la presenza di contenuti e restituire valore appropriato, preferibilmente cache i risultati in modo che non viene eseguito lo stesso controllo più e più volte.

avrei ClientRepository.SearchClientByTerm() restituire un Address inizializzata e (possibilmente) Set Line1 lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top