gpt4 book ai didi

c# - 为什么 C# 中的 async/await 即使被告知不要返回可空值?

转载 作者:行者123 更新时间:2023-12-03 14:31:42 26 4
gpt4 key购买 nike

使用 C#8,Visual Studio 2019 16.7.2,给出以下 C# 代码:

#nullable enable

public async Task<string> GetStringAsync(); ...

public async void Main()
{
var theString = await GetStringAsync();
...
}
Intellisense悬停在 theString显示 的工具提示局部变量(字符串?) theString
我的 GetStringAsync方法从不返回可为空的字符串,但该变量被推断为可为空的。
这是智能感知错误吗?或者是否有更深层次的事情发生 theString由于 await 的某种方式,实际上可以为空作品?

最佳答案

这是特意设计的,与 await 无关。 .var始终可以为空,来自 the spec :

var infers an annotated type for reference types. For instance, in var s = ""; the var is inferred as string?.


因此,您不能明确指定 theString使用 var 时不可为空.如果您希望它不可为空,请使用 string明确地。

至于为什么:简而言之,就是允许这样的场景:
#nullable enable

public async Task<string> GetStringAsync(); ...

public async void Main()
{
var theString = await GetStringAsync();

if (someCondition)
{
// If var inferred "string" instead of "string?" the following line would cause
// warning CS8600: Converting null literal or possible null value to non-nullable type.
theString = null;
}
}
编译器将使用流分析来确定变量在任何给定点是否为空。 You can read more about the decision here.

关于c# - 为什么 C# 中的 async/await 即使被告知不要返回可空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63578257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com