2010-10-26 4 views
2

Par exemple, si je dois taper quelque chose comme ce temps multiple, est-il possible de mettre cette boucle dans la méthode avec des paramètres comme LoopMethod(Code lines, int count)C# Méthode qui peut exécuter un code dans la boucle

 for (int i = 0; i <= 1000; i++) 
     { 
      code line 1; 
      code line 2; 
      ... 
      code line N; 
     } 

     for (int i = 0; i <= 1000; i++) 
     { 
      code line 1; 
      code line 2; 
      ... 
      code line N; 
     } 

si le résultat avoir quelque chose comme ça.

LoopMethod{ 
      code line 1, 
      code line 2, 
      ... 
      code line N, 
      1000 
} 
+0

délégués, Func, Action. Choisissez votre poison – Dinah

+0

Pourriez-vous donner quelques exemples avec Func, Action? – Greon

+0

* SI * vous connaissez les fonctions lambda (pensez: LINQ), je vous recommande de parcourir le code source de LINQBridge (http://code.google.com/p/linqbridge/downloads/details?name=LinqBridge-1.1 .cs). Pour une introduction: http://msdn.microsoft.com/en-us/library/bb549151.aspx – Dinah

Répondre

2

Une forme plus générique serait d'abord créer une méthode d'extension:

public static class Extension 
{ 
    public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action) 
    { 
     foreach(var currentItem in enumerable) 
     { 
      action(currentItem); 
     } 
    } 
} 

Ensuite, en utilisant que vous pouvez effectuer les opérations suivantes:

 Enumerable.Range(0, 1000).ForEach(i => 
               { 
                Console.WriteLine(i); 
               }); 

Ce qui serait itérer de 0 à 999 (utilisation 1001 comme deuxième paramètre pour inclusif). L'avantage supplémentaire est que cela fonctionne ensuite sur n'importe quel type énumérable.

+0

merci! manière très cool de le faire. – Greon

3

Voici une variante:

public static LoopMethod(int iterations, Action<int> body) 
{ 
    for (int i = 0; i < iterations; i++) 
     body(i); 
} 

Vous appelleriez comme ceci:

LoopMethod(100, i => 
{ 
    code line; 
    code line; 
}); 
0

Eh bien, vous pouvez le faire avec les délégués assez facilement:

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

public static void Main() 
{ 
    LoopMethod(() => { 
     code line 1; 
     code line 2; 
     code line 3; 
    }, 100); 
} 

Vous pouvez modifier cela comme vous voulez, même en le changeant en Action<int> qui prend comme paramètre le compteur de boucle actuel. Voir la réponse de @ Gabe pour la variante Action<int> :)

Bien sûr, je dois me demander pourquoi vous voulez reproduire une telle construction évidemment intégrée comme une boucle?

0

Vous pouvez utiliser l'expression lambda comme ceci:

LoopMethod(() => {code line 1; code line 2;}, 100); 

La déclaration de méthode ressemblerait à quelque chose comme

void LoopMethod (Action code, int count) { 
    for (int i = 0; i < count; i++) { 
     code(); 
    } 
} 

Il peut y avoir erreur de syntaxe bizarre là-bas (je ne l'ai pas testé), mais l'approche devrait fonctionner.

Questions connexes