C'è un modo più pulito per impostare questa proprietà classe anonima?
-
30-09-2019 - |
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.
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ì.