2010-12-30 2 views
1

Stellen Sie sich vor, ich habe eine Reihe globaler Methoden, die keiner bestimmten Klasse zugeordnet sind. Jede Methode nimmt genau ein Objekt und gibt genau ein Objekt verschiedener Typen zurück.Eine elegante Möglichkeit, globale Methoden zu verknüpfen und die Ergebnisse zu protokollieren

Ich möchte in der Lage sein, diese Methoden miteinander zu verknüpfen, so dass das von einer Methode zurückgegebene Objekt als Parameter an die nächste Methode usw. übergeben wird. Erweiterungsmethoden sind die einfachste und eleganteste Art, wie ich dies für die Erfüllung denken kann:

var result = someObj.ExtensionMethod1().ExtensionMethod2().ExtensionMethod3(); 

Allerdings habe ich auch eine log Methode haben, die einen Objektparameter nimmt und ich möchte das Ergebnis jeder Methode, um dies passieren log Methode. Zum Beispiel:

var result1 = someObj.ExtensionMethod1(); 
log(result1); 
var result2 = result1.ExtensionMethod2(); 
log(result2); 
var result3 = result2.ExtensionMethod3(); 
log(result3); 

Gibt es eine elegantere der Art und Weise, dies zu tun, damit ich nicht temporäre Variablen erstellen müssen jedes Mal, wenn ich eine Methode aufrufen zu übergeben?

Antwort

3

Sie suchen

public static T Log<T>(this T thing) { 
    ... 
    return thing; 
} 

var result = someObj.ExtensionMethod1().Log() 
        .ExtensionMethod2().Log() 
        .ExtensionMethod3().Log(); 

(Der generische Parameter benötigt wird, so dass der Rückgabewert ohne Gießen verwendet werden kann)

LINQPad der Dump() Methode die gleiche Art und Weise funktioniert.

Verwandte Themen