C# 链接全局方法和记录结果的优雅方式

C# 链接全局方法和记录结果的优雅方式,c#,design-patterns,refactoring,extension-methods,C#,Design Patterns,Refactoring,Extension Methods,假设我有一组与任何特定类都不关联的全局方法。每个方法只接受一个对象,并返回一个不同类型的对象 我希望能够将这些方法链接在一起,以便将一个方法返回的对象作为参数传递给下一个方法,依此类推。 扩展方法是我能想到的实现这一点的最简单、最优雅的方法: var result = someObj.ExtensionMethod1().ExtensionMethod2().ExtensionMethod3(); 但是,我还有一个log方法,它接受一个对象参数,我想将每个方法的结果传递给这个log方法。例如:

假设我有一组与任何特定类都不关联的全局方法。每个方法只接受一个对象,并返回一个不同类型的对象

我希望能够将这些方法链接在一起,以便将一个方法返回的对象作为参数传递给下一个方法,依此类推。 扩展方法是我能想到的实现这一点的最简单、最优雅的方法:

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);
有没有一种更优雅的方法可以做到这一点,这样我就不必在每次调用方法时都创建要传递的临时变量?

您正在寻找的

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

var result = someObj.ExtensionMethod1().Log()
                    .ExtensionMethod2().Log()
                    .ExtensionMethod3().Log();
publicstatict日志(这个T东西){
...
归还物;
}
var result=someObj.ExtensionMethod1().Log()
.ExtensionMethod2().Log()
.ExtensionMethod3().Log();
(需要通用参数,以便在不强制转换的情况下使用返回值)

LINQPad的
Dump()
方法的工作方式相同