Feedback

C# - "for" mal anders

Veröffentlicht von am 26.03.2010
(3 Bewertungen)
Eine for-Schleife als int Extension.
Die eigentliche Aktion wird als Block mit dem action<T> delegate übergeben.
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Komplett

Ziel des Seminars ist der flexible Umgang mit VB.NET, wie z.B. die damit verbundene eigenständige Entwicklung von Programmen oder das Verwenden von Datenbanken.

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

public static void Times(this int count, Action<int> action)
{
    for (int i = 0; i < count; i++)
    {
        action(i);
    }
} 
Abgelegt unter extension.

8 Kommentare zum Snippet

Christopher Kk schrieb am 26.03.2010:
Willst du wirklich das dass Aufrufende int Objekt auch als Zählervariable genutzt wird seh ich das richtig? Oder willst du folgendes machen?

public static void Times(this int value,int count, Action<int> action)
{
for (int i = 0; i < count; i++)
{
action(i);
}
}

Sodass du

int i = 0;
i.Times(10,Console.Writeline);

So würde zwar 10 mal 0 ausgeben werden aber auch bei deiner Extension ist es ja ohne Side Effects.
Christopher Kk schrieb am 26.03.2010:
Sorry ich meinte das bei dem Ersten Code Beispiel natürlich so

public static void Times(this int value,int count, Action action)
{
for (int i = 0; i < count; i++)
{
action(value);
}
}
Jan Christian Selke schrieb am 27.03.2010:
Guter Einwand/Anregung, aber nein bzw. ja. (?! :-))
Es war schon so gedacht, dass der aufrufende Wert gleichzeitig die Anzahl der Iterationen bestimmt.
Andernfalls wäre der Wert nur mehr oder weniger Dekoration, denn der Action Block kann ja auf alle lokalen Variablen des Aufrufers zugreifen.
Christopher Kk schrieb am 27.03.2010:
Jo stimmt, ok dann ist alles klar.
Jan Christian Selke schrieb am 27.03.2010:
Vielleicht ein kleines Beispiel zum bedingten Entfernen von Elementen aus einer Liste (bestimmt gibt es aber elegantere Wege, also nicht auf die Goldwage legen).


public void BedingtesEntfernenAusListe(List<Irgendwas> menge, Predicate<Irgendwas> filter)
{
menge.Count.Times(x =>
{
if(filter(menge[x]))
{
menge.Remove(menge[x]);
}
}
}
Christopher Kk schrieb am 28.03.2010:
Hmm das ist ganz ehrlich gesagt irgendwie mit der Kirche ums Dorf :D Dafür gibts wirklich bessere Methoden, ohne vorher über den Count zu gehen.
Jan Christian Selke schrieb am 28.03.2010:
stimmt schon, aber Columbus wollte auch mal den Seeweg nach Indien finden... Also wer weiss, wofür es mal gut sein kann ;-)
Christopher Kk schrieb am 29.03.2010:
Richtig nur hat Columbus den Seeweg nicht neu erfunden ;)
 

Logge dich ein, um hier zu kommentieren!