我有以下代码:
public bool IsUser
{
get { return false; }
}
Run Code Online (Sandbox Code Playgroud)
现在Resharper建议我写它:
public bool UseBands => false;
Run Code Online (Sandbox Code Playgroud)
但是这不能编译,我的编译器抱怨我应该添加一个";"?
更新
我在Visual Studio 2013 Update 4上使用Resharper 9时遇到过这个问题.Resharper似乎在项目属性中查找应该应用的建议规则.如果您遇到此问题,那么可能正如Szer所提到的那样,您已启用C#6.0语言级别.
要禁用它,只需在解决方案资源管理器中单击您的项目,然后将C#语言级别设置为C#6.0以外的其他级别.
PS:由于我对更改项目设置的了解有限,我不知道有什么功能来设置它.虽然我不记得改变了它(C#语言水平).谢谢你的帮助.
Sze*_*zer 11
根据MSDN,这是C#6功能之一.ReSharper9部分支持它,你可能会提前启用它.
从MSDN引用:
表达式功能成员允许方法,属性和其他类型的函数成员具有表达式而不是语句块的主体,就像使用lambda表达式一样.
方法以及用户定义的运算符和转换可以通过使用"lambda箭头"给出表达式主体:
Run Code Online (Sandbox Code Playgroud)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}";
效果与方法具有带有单个return语句的块体完全相同.
对于void返回方法 - 以及Task返回异步方法 - 箭头语法仍然适用,但箭头后面的表达式必须是语句表达式(就像lambdas的规则一样):
Run Code Online (Sandbox Code Playgroud)public void Print() => Console.WriteLine(First + " " + Last);
属性和索引器可以有getter和settersgetter-only属性,索引器可以有一个表达式主体:
Run Code Online (Sandbox Code Playgroud)public string Name => First + " " + Last; public Customer this[long id] => store.LookupCustomer(id);
请注意,没有get关键字:使用表达式body语法隐含了它.
更多信息:http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx
归档时间: |
|
查看次数: |
12256 次 |
最近记录: |