为什么"=>"分配在这种情况下有效,但"="不起作用?



我在工作中继承了一个 C# MVC Web 应用程序,并且直接在控制器类中有一个赋值,如下所示:

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

Visual Studio用一个错误突出显示它,例如";意料之中"。但它编译和运行得很好。如果我将"=>"更改为简单的赋值"=",它会突出显示 HttpContext,并显示错误"非静态字段 bla bla bla bla 需要对象引用..."它不会编译。

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

=>不是

作业。 它是 C# 6 中添加的快捷语法糖,称为"表达式体函数成员"。

这与

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

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

更具体地说;它工作在赋值上,因为它在属性 getter 中返回方法调用,而不是尝试在初始化时将方法返回值分配给类成员(这是不允许的)

有关详细信息,请参阅此 MSDN 文章。

最新更新