为什么“=>”赋值在这种情况下起作用,而“=”却不起作用?
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。
我在工作中继承了一个 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。