2015-02-05 12 views
15

Tôi có đoạn mã sau:Chuyển đổi sang biểu thức cơ thể dường như không hoạt động?

public bool IsUser 
{ 
    get { return false; } 
} 

Bây giờ Resharper gợi ý tôi viết nó để:

public bool UseBands => false; 

Tuy nhiên điều này không biên dịch và biên dịch của tôi phàn nàn rằng tôi nên thêm một ";"?

Cập nhật

Tôi đã có kinh nghiệm vấn đề này bằng Resharper 9 trên Visual Studio 2013 Update 4. Resharper dường như nhìn vào các tính chất của dự án, trong đó đề nghị quy tắc cần được áp dụng. Nếu bạn gặp phải vấn đề này, thì có lẽ như đã đề cập bởi Szer, bạn đã kích hoạt Cấp độ Ngôn ngữ C# 6.0.

Để vô hiệu hóa nó, chỉ cần nhấp vào dự án của bạn trong Solution Explorer và sau đó đặt C# Ngôn Ngữ Cấp một cái gì đó khác hơn so với C# 6.0.

PS: do kiến ​​thức hạn chế của tôi về việc thay đổi các thiết lập của dự án của tôi, tôi không biết có một chức năng để thiết lập này. Mặc dù tôi không nhớ đã thay đổi nó (C# Language Level). Cảm ơn bạn cho tất cả sự giúp đỡ của bạn.

+3

gì là Resharper và phiên bản Visual Studio bạn đang sử dụng? –

+8

Tôi sẽ giả sử bạn đã bật hỗ trợ C# 6 cho dự án của bạn, giống như một tính năng vNext.Bạn có lẽ nên bao gồm thông tin như vậy trong câu hỏi của bạn. –

+0

Vui lòng hiển thị chương trình ngắn nhưng * hoàn chỉnh để trình bày sự cố, bao gồm thông báo lỗi * hoàn thành * và chi tiết * chính xác * phiên bản Visual Studio bạn đang sử dụng. –

Trả lời

11

Theo MSDN đây là một trong C# 6 tính năng. ReSharper9 hỗ trợ một phần và bạn có thể bật nó sớm hơn một chút.

Trích từ MSDN: Các thành viên chức năng

Biểu hiện thân cho phép các phương pháp, tài sản và loại khác của các thành viên chức năng để có thân mà là những biểu hiện thay khối tuyên bố, giống như với các biểu thức lambda.

phương pháp cũng như các nhà khai thác người dùng xác định và chuyển đổi có thể được trao một cơ thể biểu hiện bằng cách sử dụng các “lambda mũi tên”:

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}"; 

Hiệu quả là chính xác giống như nếu các phương pháp đã có một chặn nội dung bằng một tuyên bố trả lại đơn.

Đối với phương pháp trở về void - và công tác trở về phương pháp async - các mũi tên cú pháp vẫn được áp dụng, nhưng các biểu thức sau đây vào mũi tên phải là một biểu thức tuyên bố (cũng giống như là quy tắc cho lambdas):

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

Properties và indexers có thể có thu khí và settersgetter chỉ tài sản và chỉ mục có thể có một cơ thể biểu hiện:

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

Lưu ý rằng không có get từ khóa: nó được ngụ ý bằng cách sử dụng cú pháp nội dung biểu thức .

More đây: http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

+4

Lưu ý: C# 6.0 và tính năng ngôn ngữ này có sẵn trong Visual Studio 2015 –

+0

Tôi cũng biết câu hỏi của nó. Tôi đang sử dụng và tôi đã nâng cấp trang web của mình để sử dụng. 4.6.1 nhưng tôi vẫn đang gặp lỗi. Hãy giúp tôi. –

Các vấn đề liên quan