转换为表达体似乎不起作用?

时间:2015-02-05 09:54:15

标签: c# lambda

我有以下代码:

public bool IsUser
{
    get { return false; }
}

现在Resharper建议我把它写到:

public bool UseBands => false;

然而,这不会编译,我的编译器抱怨我应该添加&#34 ;;"?

更新

我在Visual Studio 2013 Update 4上使用Resharper 9时遇到过这个问题.Resharper似乎在项目属性中查找应该应用的建议规则。如果您遇到此问题,那么可能正如Szer所提到的那样,您已启用C#6.0语言级别。

要禁用它,只需在解决方案资源管理器中单击您的项目,然后将C#语言级别设置为C#6.0以外的其他级别。

PS:由于我对更改项目设置的了解有限,我不知道有设置此功能的功能。虽然我不记得改变了它(C#语言水平)。谢谢你的帮助。

1 个答案:

答案 0 :(得分:11)

根据MSDN,这是C#6功能之一。 ReSharper9部分支持它,你可能会提前启用它。

来自MSDN:

  

Expression-bodied函数成员允许方法,属性等   各种函数成员使用具有表达式的实体   语句块,就像lambda表达式一样。

     

可以给出方法以及用户定义的运算符和转换   表达体使用“lambda箭头”:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 
public static Complex operator +(Complex a, Complex b) => a.Add(b); 
public static implicit operator string(Person p) => "\{p.First} \{p.Last}";
     

效果与方法具有块体的效果完全相同   只有一个退货声明。

     

对于void返回方法 - 和Task返回异步方法 -   箭头语法仍然适用,但箭头后面的表达式   必须是一个语句表达式(就像lambdas的规则一样):

public void Print() => Console.WriteLine(First + " " + Last);
     

属性和索引器只能有getter和settersgetter   属性和索引器可以有一个表达式主体:

public string Name => First + " " + Last; 
public Customer this[long id] => store.LookupCustomer(id);
     

请注意,没有get关键字:使用时暗示了它   表达体语法。

更多信息:http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx