2016-05-09 9 views
4

Mit C# 6 ich habe folgendes Modell:Get Wert oder null von Nullable-Variable

public class Model { 
    public Int32? Result { get; set; } 
} 

Und ich habe folgenden (Beispielcode):

Model model = new Model();  
Int32 result = model.Result.Value; 

Wenn Ergebnis ist null ich ein Fehler, damit ich verwenden müssen:

Int32 result = model.Result.HasValue ? model.Result.Value : 0; 

gibt es einen kürzeren Weg auf 6 in C# zu tun?

+0

warum nicht 'Int32 zu bieten? result' –

+1

Sie können 'GetValueOrDefault' verwenden, aber das gibt Ihnen' 0' für 'Int32' (Sie können 'Int32' nicht null zuweisen). –

+1

Ihr Beispiel wird nicht kompiliert, da 'null' kein Wert vom Typ' Int32' ist. Möchten Sie stattdessen "0" verwenden? – Lee

Antwort

6

Sie können den Null-ausbreitende Operator mit dem Null-Bedingungsoperator verwenden, um eine Implementierung Standard

Model modelWithNullValue = new Model(); 
Model modelWithValue = new Model { Result = 1}; 
Model modelThatIsNull = null; 
Int32 resultWithNullValue = modelWithNullValue?.Result ?? -1; 
Int32 resultWithValue = modelWithValue?.Result ?? -1; 
Int32 resultWithNullModel = modelThatIsNull?.Result ?? -2; 
Console.WriteLine(resultWithNullValue); // Prints -1 
Console.WriteLine(resultWithValue); // Prints 1 
Console.WriteLine(resultWithNullModel); // Prints -2 
+2

Sie können '??' direkt mit 'model.Result' verwenden:' int result = model.Result ?? -1; ' – Lee

+0

Guter Punkt. Bearbeiten zum Nachdenken. –

+1

@ JonathonChase Sie können nicht verwenden? .Wert –