获取可空变量的值或空值

7

使用C#6,我拥有如下模型:

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

我有如下(示例代码):

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

如果结果为null,我会遇到错误,所以我需要使用:

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

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


为什么不使用 Int32? result - sujith karivelil
1
你可以使用 GetValueOrDefault,但对于 Int32,它会返回 0(你不能将 null 赋值给 Int32)。 - Alessandro D'Andria
1
你的示例无法编译,因为null不是Int32类型的值。你想使用0吗? - Lee
当“Result”为空时,您希望“result”具有什么值? - Daniel A. White
@un-lucky 我的代码只是一个例子... Int32 的结果实际上来自另一个模型... - Miguel Moura
1
你需要修正你的问题。你的代码示例有误(即将null赋值给Int32),因此我们不知道你想要做什么。我猜你是想缩短这段代码:Int32 result = model.Result.HasValue ? model.Result.Value : 0;,但我并不完全确定。 - Jim Mischel
1个回答

9
您可以使用空值传播运算符和空值条件运算符来提供默认值。
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

编辑:从 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

2
你可以直接使用 ?? 运算符来处理 model.Resultint result = model.Result ?? -1; - Lee
1
@JonathonChase 你不能使用 ?.Value。 - Miguel Moura
@MiguelMoura 我已经编辑了一个更完整的实现,使用了空操作符作为示例,假设您的 Model 实现。 - Jonathon Chase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接