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

Why can the null conditional operator be used when setting the value of a bool without using a nullable bool?

我有下面一行代码:

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

Exists 左侧是 User class 的 属性。它的类型只是 bool,而不是 bool?。右侧的 Exists 方法是一个 API 方法,用于检查存储库中是否存在给定实体。它 returns Task<bool>。我想先检查存储库是否为 null,所以我使用 null 条件运算符。我认为如果存储库为空,那么整个右侧将只是 return 空,不能分配给 bool 类型,但编译器似乎可以接受。它是否只是以某种方式默认为假值?

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

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