24
mai
2007
Complément sur la réécriture d’opérateurs
mai
2007
Petite précision : ceci relève plus du domaine de l’amusement que du domaine du sérieux.
Je me suis amusé à définir plus que le foreach :
public delegate void Action();
static class Extension
{
public static void ForEach<T>(this IEnumerable<T> sequence, params Action<T>[] actions)
{
foreach (T t in sequence)
foreach (var action in actions)
if (action != null)
action(t);
}
public static void If(this bool condition, IEnumerable<Action> trueActions, IEnumerable<Action> falseActions)
{
foreach (Action action in (condition ? trueActions : falseActions))
if (action != null)
action();
}
public static void While(Func<bool> condition, params Action[] actions)
{
if (condition != null)
while (condition())
foreach (var action in actions)
if (action != null)
action();
}
public static void DoWhile(Func<bool> condition, params Action[] actions)
{
if (condition != null)
do
{
foreach (var action in actions)
if (action != null)
action();
} while (condition());
}
}
static class Extension
{
public static void ForEach<T>(this IEnumerable<T> sequence, params Action<T>[] actions)
{
foreach (T t in sequence)
foreach (var action in actions)
if (action != null)
action(t);
}
public static void If(this bool condition, IEnumerable<Action> trueActions, IEnumerable<Action> falseActions)
{
foreach (Action action in (condition ? trueActions : falseActions))
if (action != null)
action();
}
public static void While(Func<bool> condition, params Action[] actions)
{
if (condition != null)
while (condition())
foreach (var action in actions)
if (action != null)
action();
}
public static void DoWhile(Func<bool> condition, params Action[] actions)
{
if (condition != null)
do
{
foreach (var action in actions)
if (action != null)
action();
} while (condition());
}
}
que l’on peut utiliser de la façon suivante :
Extension.DoWhile(() => Console.ReadLine() != "END", () => Console.WriteLine(""), () => (new Random(2).Next() == 1).If(new Action[] { () => Console.WriteLine("The answer is true"), () => Console.WriteLine("ok") }, new Action[] { () => Console.WriteLine("The answer is false"), () => Console.WriteLine("ko") }));
Hummmmmmmmm ceux qui vont débuguer ce genre de code vont s’amuser :D.
Promis Fred je fais pas ça en vrai !