Cosa significa questa condizione?Cosa significa "?" dopo la variabile in C#?
if (!helper?.Settings.HasConfig ?? false)
P.S.
helper
è variabile di una classeSettings
è qualche campoHasConfig
è campo troppo
Cosa significa questa condizione?Cosa significa "?" dopo la variabile in C#?
if (!helper?.Settings.HasConfig ?? false)
P.S.
helper
è variabile di una classeSettings
è qualche campoHasConfig
è campo troppoEbbene, ?.
è un nullo condizionale operatore
https://msdn.microsoft.com/en-us/library/dn986595.aspx
.210x? .y
mezzi di richiamo null
se x
è nulla e x.y
altrimenti
??
è un operatore null coalescenza
https://msdn.microsoft.com/en-us/library/ms173224.aspx
x ?? y
significa che se x == null
ritorno y
, tuttavia x
unisce tutti i suddetti
helper?.Settings.HasConfig ?? false
mezzi: ritorno false
se
helper == null or
helper.Settings.HasConfig == null
altrimenti restituisce
helper.Settings.HasConfig
Il codice senza ??
e ?.
if
può essere riscritta in ingombrante
if (!(helper == null
? false
: (helper.Settings.HasConfig == null
? false
: helper.Settings.HasConfig)))
Si verificherà se "aiuto" non è NULL prima acessing "Impostazioni" di proprietà per evitare NullReferenceException. https://msdn.microsoft.com/en-us/library/dn986595.aspx "Vecchio" era così: if (helper! = Null & &! Helper.Settings ......).
Controllare il C# operator list:?
x .y - nulla condizionale accesso membri. Restituisce null se l'operando di sinistra è nullo.
x ?? y - restituisce x se non è nullo; altrimenti, restituisce y.
Così helper?.Settings
restituirà null se helper
è null altrimenti restituirà helper.Settings
se helper.Settings
non è nullo e helper.Settings.HasConfig
non è nullo allora restituirà il valore di helper.Settings.HasConfig
altrimenti restituirà falso.
N.B: se helper?.Settings
è null, si verificherà l'eccezione di riferimento NULL.
?.
operatore è conosciuta come la safe navigation operator
introdotta in C# 6. Null condizionale Operatore Sintassi
Il nulla operatore condizionale (?.) Viene colloquialmente denominato "Elvis operator"
a causa della sua somiglianza con un paio di occhi scuri sotto un grande ciuffo di capelli. Il condizionale nullo è una forma di un operatore di accesso membro (il.). Ecco una spiegazione semplificata per l'operatore condizionale null:
L'espressione A?.B
restituisce B
se l'operando di sinistra (A) non è nullo; altrimenti, valuta tonull.
Molti altri dettagli definiscono completamente il comportamento:?
Il tipo dell'espressione A .B è il tipo di B, nei casi in cui B è un tipo di riferimento. Se B è un tipo di valore, l'espressione A? .B è il tipo nullable che include il tipo sottostante rappresentato da B.
La specifica per la funzione mandati che A essere valutati non
più di una volta.
l'operatore condizionale cortocircuiti nulli, il che significa che si può
catena multipla? .operators, sapendo che il primo nullo
incontrato impedisce il (più a destra) componenti dell'espressione
rimaste vengano valutati.
Esempio: - Supponiamo di avere una classe Student
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
Si supponga che s rappresenta uno studente. Considerate queste due affermazioni:
var name = s?.FirstName;
var age = s?.Age;
Il nome della variabile è una stringa. Il valore del nome dipende dal valore di s
. Se s
è nullo, il nome è nullo. Se s
non è null, il nome è il valore di s.FirstName
. Si noti che s.FirstName
potrebbe essere nullo anche se non lo è s
.
L'età variabile è int?
(che è un altro modo di specificare un Nullable). Come per il nome, il valore dell'età dipende dal valore di s
. Se s è null
, l'età è un int?
senza valore. Se s è non nullo, l'età è il valore compreso tra s.Age
.
Ecco le basi. La potenza di questa funzione deriva da tutti gli scenari in cui questa funzione consente di ottenere codice più pulito.
bella spiegazione ... –