为什么“=>”赋值在这种情况下起作用,而“=”却不起作用?

Why does "=>" assignment work in this case but not "="?

我在工作中继承了一个 C# MVC web 应用程序,控制器 class 内部直接有一个赋值,如下所示:

public class FooController : Controller
{
    private IAuthenticationManager AuthenticationManager => HttpContext.GetOwinContext().Authentication;
}

Visual Studio 突出显示错误,类似于“;预期”。但它编译并运行得很好。如果我将“=>”更改为简单的赋值“=”,它会突出显示 HttpContext 并显示错误 "An object reference is required for the non-static field bla bla bla...",并且无法编译。

所以这是我的问题。为什么使用“=>”运算符可以正常编译和工作?我是 C# 的新手(来自 Android/iOS 开发)所以虽然它很容易理解一些东西,但像这样的东西让我感到困惑。

=> 不是作业。它是 C# 6 中添加的一种快捷方式,语法糖,称为 "Expression-bodied function members".

与以下内容相同:

private IAuthenticationManager AuthenticationManager
{
    get { return HttpContext.GetOwinContext().Authentication; }
}

编辑:添加来自 BradleyDotNET 的评论以澄清答案:

More specifically; it works over assignment because it is returning a method call in a property getter, not trying to assign a method return value to a class member at initialization time (which isn't allowed)

有关详细信息,请参阅 this MSDN article