2010-12-30 4 views
1

特定のクラスに関連付けられていないグローバルメソッドがあるとします。各メソッドは厳密に1つのオブジェクトをとり、さまざまな型のオブジェクトを1つだけ返します。グローバルメソッドをリンクして結果を記録するうまい方法

私は1つの方法で返されたオブジェクトは、その次のメソッドにパラメータとして渡されますように、一緒にこれらのメソッドをリンクできるようにしたいです。 拡張メソッドは、私はこれを達成するための考えることができる最も簡単でエレガントな方法です:

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

はしかし、私はまた、オブジェクトパラメータを受け取りlog方法を持っていると私はこれまで、各メソッドの結果を渡したいですlog方法。たとえば:

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

ので、私はメソッドを呼び出すたびに渡すために、一時的な変数を作成する必要はありません。これを行う方法のよりエレガントありますか?

答えて

3

あなたは

LINQPadのDump()方法は同じように動作します(戻り値はキャストせずに使用することができるように、一般的なパラメータが必要とされている)

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

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

を探しています。

関連する問題