当我使用
var frontPage = await GetFrontPage();
protected override async Task<WordDocument> GetFrontPage()
{
return null;
}
这段代码工作正常,我得到了空值在frontpage变量.但当我重写函数为
protected override Task<WordDocument> GetFrontPage() => null;
我得到了一个NullReferenceException
。
有人能帮我理解这两种说法之间的区别吗?
3条答案
按热度按时间e4yzc0pl1#
有人能帮我理解这两种说法之间的区别吗?
你的第一个声明是
async
,所以编译器生成适当的代码使它返回一个Task<WordDocument>
,它有一个带有方法结果的结果,任务本身不是空的-它的 result 是空的。你的第二个声明是 not
async
,因此它只返回一个空引用,任何等待或取消引用该空引用的代码都将导致抛出NullReferenceException
。只需在第二个声明中添加
async
修饰符,它的工作方式与第一个声明相同。注意这里没有lambda表达式--你的第二个声明是一个 *expression-bodied方法 *,它只是使用了与lambda表达式相同的语法(
=>
)。tv6aics12#
尝试:
xytpbqjk3#
这对我很有效: