c# 3.0 Support für MethodChaining mit Extension Methods und Lambda Expressions

Thomas Darimont

Erfahrenes Mitglied
Support für MethodChaining mit Extension Methods und Lambda Expressions

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 :D
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
 
Zurück