C# Language                
            Nollvillkorade operatörer
        
        
            
    Sök…
Syntax
- X .Y; // null om X är noll annars XY
- ? X .Y .Z; // null om X är noll eller Y är noll annars XYZ
- X [index]?; // null om X är noll annars X [index]
- X .ValueMethod (); // null om X är noll annars är resultatet av X.ValueMethod ();
- X .VoidMethod (); // gör ingenting om X är noll annars ring X.VoidMethod ();
Anmärkningar
 Observera att när du använder nollkoalesceringsoperatören på en värdetyp T kommer du att få en Nullable<T> tillbaka. 
Noll-villkorad operatör
 ?. operatören är syntaktiskt socker för att undvika fullständiga nollkontroller. Det är också känt som Safe navigation operator . 
Klass som används i följande exempel:
public class Person
{
    public int Age { get; set; }
    public string Name { get; set; }
    public Person Spouse { get; set; }
}
 Om ett objekt potentiellt är noll (till exempel en funktion som returnerar en referenstyp) måste objektet först kontrolleras för null för att förhindra en eventuell NullReferenceException . Utan den nollvillkorade operatören skulle detta se ut: 
Person person = GetPerson();
int? age = null;
if (person != null)
    age = person.Age;
Samma exempel med den nollvillkorade operatören:
Person person = GetPerson();
var age = person?.Age;    // 'age' will be of type 'int?', even if 'person' is not null
Kedja operatören
Den nollvillkorade operatören kan kombineras på ett objekts medlemmar och undermedlemmar.
// Will be null if either `person` or `person.Spouse` are null
int? spouseAge = person?.Spouse?.Age;
Kombination med Null-Coalescing Operator
Operatören med nollvillkor kan kombineras med operatören nollkoaliserande för att tillhandahålla ett standardvärde:
// spouseDisplayName will be "N/A" if person, Spouse, or Name is null
var spouseDisplayName = person?.Spouse?.Name ?? "N/A";
Noll-villkorligt index
 På samma sätt som ?. operatören, kontrollerar den nollvillkorade indexoperatören efter nollvärden vid indexering i en samling som kan vara noll. 
string item = collection?[index];
är syntaktiskt socker för
string item = null;
if(collection != null)
{
    item = collection[index];
}
Undvika NullReferenceExceptions
var person = new Person
{
    Address = null;
};
var city = person.Address.City; //throws a NullReferenceException
var nullableCity = person.Address?.City; //returns the value of null
Denna effekt kan kedjas ihop:
var person = new Person
{
    Address = new Address
    {
        State = new State
        {
            Country = null
        }
    }
};
// this will always return a value of at least "null" to be stored instead
// of throwing a NullReferenceException
var countryName = person?.Address?.State?.Country?.Name; 
Noll-villkorad operatör kan användas med förlängningsmetod
 Extensionsmetod kan fungera på nollreferenser , men du kan använda ?. att ändå nollkontrollera. 
public class Person 
{
    public string Name {get; set;}
}
public static class PersonExtensions
{
    public static int GetNameLength(this Person person)
    {
        return person == null ? -1 : person.Name.Length;
    }
}
 Normalt utlöses metoden för null och returnerar -1: 
Person person = null;
int nameLength = person.GetNameLength(); // returns -1
 Använder ?. metoden kommer inte att triggas för null , och typen är int? : 
Person person = null;
int? nameLength = person?.GetNameLength(); // nameLength is null.
 Detta beteende förväntas faktiskt från det sätt på vilket ?. operatören fungerar: den kommer att undvika att NullReferenceExceptions för att undvika NullReferenceExceptions . Men samma logik gäller förlängningsmetoden, trots skillnaden i hur metoden deklareras. 
För mer information om varför tilläggsmetoden kallas i det första exemplet, se tilläggsmetoderna - nollkontroll dokumentation.