2015-02-05 15 views
15

Ich habe den folgenden Code:In Ausdruckskörper konvertieren scheint nicht zu funktionieren?

public bool IsUser 
{ 
    get { return false; } 
} 

Jetzt ReSharper schlägt vor, ich schreibe es an:

public bool UseBands => false; 

Dies gilt jedoch nicht kompilieren und mein Compiler beschwert, dass ich einen hinzufügen sollte „“?

aktualisiert

Ich habe dieses Problem erlebt mit ReSharper 9 auf Visual Studio 2013-Update 4. ReSharper in den Projekteigenschaften zu suchen scheint, was Vorschlag Regeln sollen sie gelten. Wenn dieses Problem auftritt, haben Sie wahrscheinlich, wie von Szer erwähnt, den C# 6.0-Sprachlevel aktiviert.

Um es zu deaktivieren, klicken Sie einfach auf Ihr Projekt im Lösungsexplorer und stellen Sie dann die C# -Sprachebene auf etwas anderes als C# 6.0 ein.

PS: Aufgrund meiner begrenzten Kenntnisse über die Änderung der Einstellungen meines Projekts wusste ich nicht, dass es eine Funktion gab, um dies zu setzen. Obwohl ich mich nicht daran erinnern kann, es geändert zu haben (das C# Sprachniveau). Danke für all deine Hilfe.

+3

was die ReSharper und Visual Studio-Version verwenden? –

+8

Ich gehe davon aus, dass Sie die C# 6-Unterstützung für Ihr Projekt aktiviert haben, da dies wie eine vNext-Funktion aussieht.Sie sollten Informationen wie diese in Ihre Frage aufnehmen. –

+0

Bitte zeigen Sie ein kurzes, aber * vollständiges * Programm, das das Problem einschließlich der * vollständigen * Fehlermeldung und Details von * genau * zeigt, welche Version von Visual Studio Sie verwenden. –

Antwort

11

Nach MSDN ist dies eine der C# 6 Funktionen. ReSharper9 unterstützt es teilweise und Sie haben es wahrscheinlich ein bisschen früh aktiviert.

Zitat von MSDN:

Expression-bodied Funktionselemente ermöglichen Methoden, Eigenschaften und andere Arten von Funktionselementen Körper zu haben, die Ausdrücke statt von Anweisungsblöcken sind, genau wie mit Lambda-Ausdrücke.

Methoden sowie benutzerdefinierte Operatoren und Umwandlungen können Ausdruck Körper durch die Verwendung des „Lambda-Pfeil“ gegeben werden:

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

Der Effekt ist genau das gleiche wie wenn die Methoden a gehabt Blockkörper mit einer einzelnen Rückkehranweisung.

Für nichtig Rückkehr Methoden - und Aufgaben Rückkehr async Methoden - die Pfeil Syntax gilt nach wie vor, aber der Ausdruck nach dem Pfeil muss eine Erklärung Ausdruck sein (ebenso wie die Regel für lambdas ist):

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

Eigenschaften und Indexer können haben Getter und settersgetter-only Eigenschaften und Indexer können einen Ausdruck Körper haben:

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

Hinweis, dass es keine get ist Schlüsselwort: Es wird durch die Verwendung der Ausdruckskörpersyntax impliziert.

Mehr hier: http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

+4

Hinweis: C# 6.0 und diese Sprachfunktion sind in Visual Studio 2015 verfügbar –

+0

Ich wusste, es ist eine Frage zu. Ich verwende und ich aktualisierte meine Website, um .net 4.6.1 zu verwenden, aber immer noch bin ich mit dem Fehler konfrontiert. Bitte helfen Sie. –

Verwandte Themen