Sri*_*rma -1 .net c# nullreferenceexception async-await expression-body
当我使用时
var frontPage = await GetFrontPage();
protected override async Task<WordDocument> GetFrontPage()
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,我在 frontpage 变量中得到空值。但是当我将函数重写为
protected override Task<WordDocument> GetFrontPage() => null;
Run Code Online (Sandbox Code Playgroud)
我收到了一个NullReferenceException.
谁能帮助我理解这两种说法之间的区别?
谁能帮助我理解这两种说法之间的区别?
您的第一个声明是async,因此编译器会生成适当的代码以使其返回Task<WordDocument>具有该方法结果的结果。任务本身不为 null - 它的结果为 null。
您的第二个声明不是, async因此它只返回一个空引用。任何等待或以其他方式取消引用该空引用的代码确实会导致NullReferenceException抛出 a 。
只需将async修饰符添加到第二个声明中,它的工作方式与第一个声明相同。
请注意,这里没有 lambda 表达式 - 您的第二个声明是一个表达式主体方法。=>它只是使用与 lambda 表达式相同的语法 ( )。
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |