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]

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

C# Aufbaukurs

Sie haben grundlegende .NET- und C#-Kenntnisse und und wollen diese nun erweitern. Der Aufbaukurs C# führt Sie ein die Arbeit mit Interfaces und Delegates, Generics und Parallel Computing.

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!