Ho diversi semplici vecchi oggetti C# restituiti da un'API e diversi livelli di POCO nidificati all'interno di essi. Ho bisogno di accedere ai campi contenuti in profondità all'interno di queste strutture, ma poiché l'API lascia questi oggetti nidificati come nulli quando mancano i dati, mi ritrovo a dover fare molti controlli null solo per arrivare sul campo che voglio davvero.Controlli nulli negli oggetti nidificati
if(obj != null && obj.Inner != null && obj.Inner.Innerer != null) { ... }
Il modulo più breve che ho trovato è quello di utilizzare l'operatore ternario.
obj != null && obj.Inner != null && obj.Inner.Innerer != null ? obj.Inner.Innerer.Field : null;
C# ha un modo per farlo senza dover scrivere tutti quei confronti? Mi piacerebbe davvero qualcosa di breve e semplice come:
obj.Inner.Innerer.Field ?? null;
Ma questo controlla solo Campo per null.
Che dire di [questo] (http://stackoverflow.com/questions/17657942/nice-way-to-avoid-null-checks-in-ifs/17663536#17663536)? – rene
Hmm, il metodo 'f' è decisamente troppo disordinato. Rende più breve la linea di codice, ma direi che il ternario è più facile da capire. Il metodo 'tc' è piuttosto vicino, ma genera un'eccezione nel metodo che è una penalità legata alle prestazioni (specialmente rispetto a un controllo Null). Così vicino, ma non esattamente quello che spero. – Syon
Un'idea è che si potrebbe provare ad accedere direttamente a Inner.Innerer.Field durante il tentativo di catturare un'eccezione null. Se qualcosa lungo la strada è nullo, viene rilevata l'eccezione e si restituisce null. Altrimenti si restituisce il valore. – KappaG3