Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1550 | Anzahl registrierter User: 1839 | Besucher online: 4
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

"for" mal anders


Autor: Jan Christian Selke
Sprache: C#
Bewertung:
1.62 (3 votes)
Anzahl der Aufrufe: 3590
  
Kick it on dotnet-kicks.de  

Beschreibung:

Eine for-Schleife als int Extension.
Die eigentliche Aktion wird als Block mit dem action delegate übergeben.


Abgelegt unter: extension.



C#
1
2
3
4
5
6
7
public static void Times(this int count, Action<int> action)
{
    for (int i = 0; i < count; i++)
    {
        action(i);
    }
} 
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Christopher Kk schrieb am:  26.03.2010 23:09:43

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 23:10:43

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 20:29:36

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 21:58:31

Jo stimmt, ok dann ist alles klar.
Jan Christian Selke schrieb am:  27.03.2010 22:35:40

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 11:19:53

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 21:16:45

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 14:53:42

Richtig nur hat Columbus den Seeweg nicht neu erfunden ;)


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.