Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Was sind "Lokale statische Methoden"?
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

Was sind "Lokale statische Methoden"?

beantworten | zitieren | melden

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:
Fehler
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 (-:

Moderationshinweis von Abt (08.09.2019 - 10:12)

Es gibt kein Grund im Titel irgendeine 'Newbie' Nummerierung zu führen.
Siehe auch [Hinweis] Wie poste ich richtig?
Danke.

private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.067
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

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. )-:
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.494

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.067
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.196

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.196

beantworten | zitieren | melden

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 :-)
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.856
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

auch Dir vielen Dank (-:
private Nachricht | Beiträge des Benutzers