Autor Beitrag
Ccenter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Do 22.07.10 15:58 
Hallo,
ich habe folgenden Code(vereinfacht):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
static void Main(string[] args)
{
     starthere:
     testmethode();
}

public static void testmethode()
{
     if(...)
     {
         goto starthere;
     }
     else
     {
         Console.WriteLine("...");
     }
}


Mein Problem besteht nun darin, dass "starthere" in der Testmethode nicht erkannt wird. Wie kann man am besten das Problem lösen?


Moderiert von user profile iconChristian S.: Topic aus Sonstiges (.NET) verschoben am Do 22.07.2010 um 15:59
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 22.07.10 16:17 
Hallo,

ich kenne mich mit goto-Anweisungen nicht wirklich aus (den diese sollte man eigentlich nicht verwenden!). Aber das liegt wohl daran, dass die Markierung außerhalb der Methode ist.

Am simpelsten läßt sich das wohl durch ein Schleife lösen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
static void Main(string[] args)
{
  TestMethode();
}

public static void TestMethode()
{
   while (!...)
   {
      // Hier solltest wohl noch eine Verzögerung einbauen
      // Noch besser Allerdings wenn du bei der If... durch ein Event ersetzt
      Thread.Sleep(100);
   }

   Console.WriteLine("...");
}



Also wie gesagt so würde sich dein Konstrukt umschreiben lassen (er bleibt aber immer noch hässlich) ;)

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 22.07.10 16:20 
Einfach kein goto verwenden? Wenn du schon goto benutzt solltest du uns bei dem Ruf den goto geniest hat erst mal deutlicher klar machen warum du das brauchst. Ansonsten kannst du einfach testmethode wieder aufrufen. Zumindest entspricht das in etwa deinem Beispielcode

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public static void testmethode()
{
     if(...)
     {
          testmethode()
     } 
     ...
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 22.07.10 16:38 
Wichtige Stichwort zum Nachschlagen: Iteration bzw. Rekursion

'goto' solltest du aber (wie schon geschrieben) besser meiden.
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Sa 24.07.10 12:30 
Ich versuche das jetzt einfach zu umgehen.
Wäre nur etwas schneller mit der goto Anweisung gewesen. Aber wenn man die nach Möglichkeit eh nicht verwenden soll,
hat sich das dann damit wohl auch erledigt.
Ich werde jetzt dem Tipp von danielf nachgehen, damit sollte das auch funktionieren.
Danke ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 24.07.10 12:39 
user profile iconCcenter hat folgendes geschrieben Zum zitierten Posting springen:
Wäre nur etwas schneller mit der goto Anweisung gewesen.
Schneller im Programm oder schneller beim Programmieren? ;-)
Wenn du statt einem guten Algorithmus / Konzept lieber schnell etwas hinbiegst, rächt sich das später meistens.

Denn fast jedes goto lässt sich durch einen guten Algorithmus vermeiden und besser programmieren wie schon gesagt wurde.

Wenn du überall gotos hast, siehst du da bald nicht mehr durch, weil du von a nach b und von x nach y springst (kein gut sichtbarer Programmablauf). Oder spätestens wenn jemand anderes den Code anschaut, sieht der nicht mehr durch. ;-)
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Sa 24.07.10 16:45 
Schneller zu programmieren :P
Aber du hast schon recht, unübersichtlicher wird es damit schon.
Was ich mich nur frage, weshalb man die goto Anweisung sonst nicht verwenden soll. Was für "Gefahren" bürgt die denn :D?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 25.07.10 11:08 
Die schlechte Wartbarkeit und Lesbarkeit des Codes und der Programmlogik ist der Grund.

Vom programmtechnischen Aspekt ist es kein Problem. Schließlich ist ein goto letztlich nur ein Sprung und die setzt man indirekt ja ständig ein.