2010-04-11 20 views
5

Nel mio codice, c'è una scorciatoia che posso usare per assegnare una variabile al valore della proprietà di un oggetto SOLO se l'oggetto non è t null?Come assegnare un valore di una proprietà ad una var SOLO se l'oggetto non è nullo

string username = SomeUserObject.Username;  // fails if null 

so di poter fare un controllo, come se (SomeUserObject! = Null), ma penso di aver visto una scorciatoia per questo tipo di test.

ho provato:

string username = SomeUserObject ?? "" : SomeUserObject.Username; 

Ma questo non funziona.

+0

Al secondo, stai pensando sia del nulla operatore coalescenza * e * l'operatore condizionale. Sfortunatamente, sei riuscito a combinarli in codice illegale. Vedere le risposte seguenti per l'utilizzo dell'operatore condizionale. –

risposta

3

la sintassi al secondo è leggermente fuori.

string name = SomeUserObject != null ? SomeUserObject.Username : string.Empty; 
-1

Si chiama null coalescenza e viene eseguita come segue:

string username = SomeUserObject.Username ?? "" 
+1

Continuerà a non funzionare se SomeUserObject è nullo. – micahtan

+0

SomeUserObject potrebbe essere nullo. Dovrebbe usare l'operatore condizionale e controllare che il suo oggetto sia nullo. –

+0

Ragazzi, avete ragione - ho letto male la domanda, mi dispiace! –

2

Il più vicino che si vuole ottenere, credo, è il seguente:

string username = SomeUserObject == null ? null : SomeUserObject.Username; 
1

Questo è probabilmente il più vicino si sta per arrivare:

string username = (SomeUserObject != null) ? SomeUserObject.Username : null; 
1

È possibile utilizzare? : come altri hanno suggerito ma si potrebbe prendere in considerazione il modello di oggetto Null in cui si crea uno speciale utente statico User.NotloggedIn e lo si utilizza invece di null ovunque.

Quindi diventa sempre facile fare sempre .Username.

Altri vantaggi: ottieni/puoi generare diverse eccezioni per il caso (null) in cui non hai assegnato una variabile e (non connesso) dove quell'utente non è autorizzato a fare qualcosa.

tuo manuale NotloggedIn può essere una classe derivata da utente, dire NotLoggedIn che sostituisce i metodi e genera eccezioni su cose che non si possono fare quando non accesso, come effettuare pagamenti, inviare e-mail, ...

Come una classe derivata da utente si ottiene un po 'abbastanza bello di zucchero sintattico, come si può fare cose come if (someuser is NotLoggedIn) ...

2

in C# 6.0 ora si può fare

string username = SomeUserObject?.Username; 

nome utente verrà impostato su null se SomeUSerObject è nullo. Se si desidera ottenere il valore "", si può fare

string username = SomeUserObject?.Username ?? ""; 
Problemi correlati