获取可变空值的值或null

Mig*_*ura 5 c# c#-6.0

使用C#6,我有以下型号:

public class Model {
  public Int32? Result { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有以下(示例代码):

Model model = new Model();     
Int32 result = model.Result.Value;
Run Code Online (Sandbox Code Playgroud)

如果Result为null我得到一个错误,所以我需要使用:

Int32 result = model.Result.HasValue ? model.Result.Value : 0;
Run Code Online (Sandbox Code Playgroud)

在C#6中有更短的方法吗?

Jon*_*ase 8

您可以将null-propagating运算符与null条件运算符一起使用以提供默认值.

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
Run Code Online (Sandbox Code Playgroud)

编辑:从C#7.2开始,以下语法对于在这种情况下设置默认值也有效.

Model badModel = null;
var result = badModel?.Result ?? default;
var pre72 = badModel?.Result ?? default(int);
Console.WriteLine(result); // 0
Console.WriteLine(result.GetType().Name); // Int32
Run Code Online (Sandbox Code Playgroud)

  • 您可以直接使用`??`和`model.Result`:`int result = model.Result ?? -1;` (2认同)