我在我的工作中继承了一个C#MVC Web应用程序,并且在控制器类中直接有一个如下所示的赋值:
public class FooController : Controller { private IAuthenticationManager AuthenticationManager => HttpContext.GetOwinContext().Authentication; }
Visual Studio突出显示错误,类似于"; expected".但它编译并运行得很好.如果我将"=>"更改为一个简单的赋值"=",它会突出显示HttpContext,并显示错误"非静态字段bla bla bla需要一个对象引用..."它将无法编译.
所以这是我的问题.为什么使用"=>"运算符编译并正常工作?我是C#的新手(来自Android/iOS开发),所以虽然很容易理解一些东西,但这样的东西让我感到困惑.
=>
不是任务.这是C#6中添加的一种快捷方式,语法糖,被称为"表达式身体功能成员".
它与以下内容相同:
private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } }
编辑:添加BradleyDotNET的评论以澄清答案:
进一步来说; 它适用于赋值,因为它在属性getter中返回一个方法调用,而不是在初始化时尝试将方法返回值赋给类成员(这是不允许的)
有关详细信息,请参阅此MSDN文章.