Hallo zusammen,
dieses o.g. Thema ist mir sehr leicht gefallen. Zum Glück. Aber, wie sollte es anders sein, beim Nachvollziehen des im Buch genanntn Beispiels kommt es zu einem Fehler:
Fehlermeldung:
Fehler CS8652 Das Feature "Statische lokale Funktionen" befindet sich zurzeit in der Vorschau und wird nicht unterstützt. Um Previewfunktionen zu nutzen, verwenden Sie die Sprachversion "Preview".
Der Code dazu:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2_4_Operatoren____3_Logische_Operatoren
{
class Program
{
static void Main(string[] args)
{
int x = 8;
int y = 9;
if ((x != y) | DoSomething())
Console.WriteLine("Bedingung ist erfüllt");
Console.ReadLine();
static bool DoSomething()
{
Console.WriteLine("in DoSomething");
return true;
}
Console.ReadKey();
}
}
}
Ansich verstehe ich was hier passieren soll. Trotzdem wüsste ich doch gerne etwas mit der Fehlermeldung anzufangen.
Danke im Voraus (-:
Es gibt kein Grund im Titel irgendeine 'Newbie' Nummerierung zu führen.
Siehe auch [Hinweis] Wie poste ich richtig?
Danke.
Sicher das das Beispiel korrekt ist?
Der Compiler interpretiert dein static bool DoSomething nämlich nicht als lokale Methode sondern eben als statische lokale Variable DoSomething.
Entsprechend kommt es auch zu dieser Meldung.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Habs eben nochmal überprüft. Das Beispiel steht so im Buch und er meldet diesen Fehler. Ich weiß eben nur nicht, wie es richtig heißen muss, weil ich ja aus diesem Buch lerne. )-:
Erst seit C# 7 gibt es lokale Methoden: Lokale Funktionen
Ansonsten müssen Methoden immer direkt untereinander in einer Klasse definiert werden, bei dir also unterhalb (oder oberhalb) der Main
-Methode:
namespace _2_4_Operatoren____3_Logische_Operatoren
{
class Program
{
static void Main(string[] args)
{
// ...
}
static bool DoSomething()
{
Console.WriteLine("in DoSomething");
return true;
}
}
}
PS: Welches Buch verwendest du denn?
Hab mal kurz in der Doku nachgelesen.
Dort werden die lokalen static Methoden seit C# 7 supportet.
Vermutlich sind deine Projekt Einstellungen nicht aktuell, weshalb du noch gegen eine alte C# Version arbeitest und der Compiler aktuelle Features nicht kennt.
Nachtrag:
Th69 war schneller 😃
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hinweis: alle CS Fehler, die Visual Studio im Error Window anzeigt, sind vollständig dokumentiert.
Einfach den Fehler anklicken (Rechtsklick, Menüname weiß ich gerade nicht) oder F1 drücken, dann wird man auf die Doku mit der jeweiligen Lösung / Fehlerbehebung geleitet.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
C# 8 mit Visual Studio 2019
Bis jetzt bin ich auf den ersten 103 Seiten auf 5 mehr oder weniger gravierende Fehler gestoßen. 2 Davon musste ich wie diesen hier im Forum behandeln, weil es mir nicht möglich war den Fehler selber zu erkennen.
C#8 ist standardmäßig auch nicht in Visual Studio aktiviert, sondern 7.3 (C# 8 ist auch noch nicht mal final veröffentlich, sondern kommt erst Ende September mit .NET Core 3).
Alle weiteren Versionen müssen über die Projekteinstellungen gesetzt werden (alternativ LangVersion direkt im csproj File).
Bin mir sicher, dass der Hinweis auch im Buch steht 😃
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo RafaelVogt,
lokale Funktionen wurden mit C# 7 eingeführt. Durch praktischen Einsatz dieser Sprachversion wurde bemerkt, dass oft versehentliche lokale Variablen und Argumente in der lokalen Funktion verwendet wurde, worauf der Compiler dafür eine "Closure" erstellen musste. Da dies eben oft unbewusst gemacht wurde, entschied man sich mit C# 8 dem Abhilfe zu leisten und somit die "statischen lokalen Funktionen" einzuführen -- gekennzeichnet mit dem static
Schlüsselwort bei der Deklaration der lokalen Funktion.
Wie bereits erwähnt und auch in der Fehlermeldung (indirekt) angegeben, muss dafür die Sprachversion 8.0 gesetzt werden. latest
genügt hier nicht, es muss explizit 8.0
od. preview
verwendet werden.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"