为什么在不使用可空bool的情况下设置bool的值时可以使用null条件运算符?

时间:2016-11-11 23:12:36

标签: c# boolean nullable null-conditional-operator

我有以下代码行:

user.Exists = await this.repository?.Exists(id);
左侧的

ExistsUser类的属性。它的类型只是bool,而不是bool?。右侧的Exists方法是一种API方法,用于检查存储库中是否存在给定实体。它返回Task<bool>。我想先检查存储库是否为null,因此我使用null条件运算符。我认为如果存储库为null,那么整个右侧只返回null,这不能分配给bool类型,但编译器似乎没问题。是否只是以某种方式默认为错误值?

1 个答案:

答案 0 :(得分:8)

问题在于等待。可空在nwait之前发生,所以它就像await (this.repository?.Exists(id)),当this.repository为null时,变成await (null?.Exists(id)),变成await (null),崩溃。 ?。无法进入Task<bool>并使其成为Task<bool?>

因此,您将获得正确的布尔值或异常。