Thomas Darimont
Erfahrenes Mitglied
Support für MethodChaining mit Extension Methods und Lambda Expressions
Hallo,
schaut mal hier:
Ausgabe:
mit diesem Trick kann man so ziemlich jeden Aufruf direkt oder indirekt als verketten Aufruf durchführen, selbst wenn der eigentliche Rückgabetyp void ist
foo.operation1().operation2().operation3().operation4().operation5().operation6();
Inspiriert hat mich dazu dieser Blog Eintrag:
http://moonbase.rydia.net/mental/blog/programming/eavesdropping-on-expressions
Gruß Tom
Hallo,
schaut mal hier:
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace De.Tutorials.Training
{
public class MethodChainingExample
{
static void Main(string[] args)
{
"AA".ToLower().Tap((string s) => Console.WriteLine(s)).ToUpper().Tap((string s) => Console.WriteLine(s));
Console.WriteLine("########################");
new List<string>().Tap((List<String> list) => list.Add("aaa")).Tap((List<String> list) => list.Add("bbb")).Tap((List<String> list) => list.Add("ccc")).ForEach((string item) => Console.WriteLine(item));
}
}
public static class Xtensions
{
public static T Tap<T>(this T o, Action<T> action)
{
action.DynamicInvoke(o);
return o;
}
}
}
Ausgabe:
Code:
aa
AA
########################
aaa
bbb
ccc
Drücken Sie eine beliebige Taste . . .
mit diesem Trick kann man so ziemlich jeden Aufruf direkt oder indirekt als verketten Aufruf durchführen, selbst wenn der eigentliche Rückgabetyp void ist
foo.operation1().operation2().operation3().operation4().operation5().operation6();
Inspiriert hat mich dazu dieser Blog Eintrag:
http://moonbase.rydia.net/mental/blog/programming/eavesdropping-on-expressions
Gruß Tom