Конвертировать в тело выражения, похоже, не работает?

У меня есть следующий код:

public bool IsUser
{
    get { return false; }
}

Теперь Resharper предлагает записать его на:

public bool UseBands => false;

Однако это не компилируется, и мой компилятор жалуется, что я должен добавить ";"?

Обновление

Я столкнулся с этой проблемой, используя Resharper 9 в Visual Studio 2013 Update 4. Кажется, что Resharper просматривает свойства проекта, какие правила предложения должны применяться. Если вы столкнулись с этой проблемой, то, возможно, как упоминалось в Szer, вы включили уровень языка С# 6.0.

Чтобы отключить его, просто нажмите на свой проект в проводнике решений, а затем установите уровень языка С# на нечто, отличное от С# 6.0.

PS: из-за моих ограниченных знаний об изменении настроек моего проекта я не знал, что есть функция, чтобы установить это. Хотя я не помню, чтобы это изменило (уровень языка С#). Спасибо вам за вашу помощь.

Ответы

Ответ 1

В соответствии с MSDN это одна из функций С# 6. ReSharper9 частично поддерживает его, и вы, вероятно, включили его немного раньше.

Цитата из MSDN:

Элементы функции, выражающие выражение, позволяют использовать методы, свойства и другие типы членов функции, чтобы иметь тела, которые являются выражениями вместо блоков операторов, как и с лямбда-выражениями.

Способы, а также определяемые пользователем операторы и преобразования могут быть заданы тело выражения с помощью "стрелки лямбды":

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.

Для методов возврата пустоты - и задачи, возвращающие методы async - синтаксис стрелки все еще применяется, но выражение, следующее за стрелкой должно быть выражением оператора (так же, как правило для lambdas):

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

В свойствах и индексаторах могут быть только получатели и сеттеры свойства и индексаторы могут иметь тело выражения:

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