为什么在不使用可为空的 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?>
.
因此您将获得正确的布尔值或异常。
我有下面一行代码:
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?>
.
因此您将获得正确的布尔值或异常。