我在工作中继承了一个 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 文章。