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
Wie kann ich Codeblöcke in eine Methode übergeben?
Sebrahi
myCSharp.de - Member



Dabei seit:
Beiträge: 12

Themenstarter:

Wie kann ich Codeblöcke in eine Methode übergeben?

beantworten | zitieren | melden

Hallo liebe Community,
gibt es eine Möglichkeit eine Methode zu erstellen die Anweisungen in geschweiften Klammern übergibt. Als Beispiel ich erstelle folgende Methode


        public static void vier_mal_wiederholen()
        {
            for(int i=1;i≤4;i++)
            {
                // hier soll der Code rein der viermal wiederholt werden soll

            }

        }


Nun ist mein Ziel die Methode folgendermaßen aufrufen zu können.


       vier_mal_wiederholen()
      {
         MessageBox.Show("hi");
      }

Also eine Methode erstellen die die Anweisungen in den geschweiften Klammern an eine bestimmte stelle in der Methode ausführt.

Ist dies möglich in C# zu realisieren und falls ja wie ist das möglich?
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 233
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Hallo Sebrahi,

du kannst den Code der an einer anderen Stelle ausgeführt werden soll in eine Methode schreiben und diese dann über die Verwendung von Delegates an einer anderen Stelle ausführen:

	public static void vier_mal_wiederholen()
	{
		for(int i=1;i≤4;i++)
		{
			// hier soll der Code rein der viermal wiederholt werden soll
		}
	}
	
	public static void drei_mal_wiederholen()
	{
		for(int i=1;i≤3;i++)
		{
			// hier soll der Code rein der dreimal wiederholt werden soll
		}
	}
	
	public static void Test(Action action)
	{
		action();
		MessageBox.Show("hi");
	}
	
	public static void Main()
	{
		Action action = vier_mal_wiederholen;
		Test(action);
		
		Test(drei_mal_wiederholen);
	}

Grüße
spooy
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2332

beantworten | zitieren | melden

Hallo,

aufbauend zu dem was Spook schrieb, könnte man das eventuell noch universeller machen.

Beispiel:


public static void Repeat(Action action, int count)
{
     for(int i = 0; i < count; i++)
          action();
}

public static void Main()
{
      Repeat(PrintDate, 5);
}

private static void PrintDate()
{
     Console.WriteLine(DateTime.Now.ToString());
}
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



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

beantworten | zitieren | melden

@inflames2k
Fehlt in deinem count Parameter ggf. der Default Wert oder bei deinen Aufrufen der Count Parameter?
Und die Klammern beim Aufruf von Repeat für PrintDate sind doch eigentlich auch nicht nötig, da die Methode als Parameter übergeben wird.

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: 15618
Herkunft: BW

beantworten | zitieren | melden

T-Virus, dann korrigier es doch einfach :-)


        public static void Repeat(Action action, int count)
        {
            for (int i = 0; i < count; i++)
            {
                action();
            }
        }

        public static void Main()
        {
            Repeat(() => PrintDate(), 5);
            // Alternativ die Kurzschreibweise
            Repeat(PrintDate, 5);
        }

        private static void PrintDate()
        {
            Console.WriteLine(DateTime.Now.ToString());
        }
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2332

beantworten | zitieren | melden

@T-Virus:

Huch. Kommt davon wenn man nicht noch mal sauber drüber liest.
Danke.
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers