想象一下,我有一组与任何特定类无关的全局方法。每个方法只需要一个对象,并且只返回一个不同类型的对象。
我希望能够将这些方法链接在一起,以便一个方法返回的对象作为参数传递给下一个方法,依此类推。 扩展方法是我能想到的最容易和最优雅的方法:
var result = someObj.ExtensionMethod1().ExtensionMethod2().ExtensionMethod3();
但是,我还有一个log
方法,它接受一个object参数,我希望将每个方法的结果传递给这个log
方法。例如:
var result1 = someObj.ExtensionMethod1();
log(result1);
var result2 = result1.ExtensionMethod2();
log(result2);
var result3 = result2.ExtensionMethod3();
log(result3);
有没有更优雅的方法这样做,所以每次调用方法时都不需要创建临时变量?
答案 0 :(得分:3)
您正在寻找
public static T Log<T>(this T thing) {
...
return thing;
}
var result = someObj.ExtensionMethod1().Log()
.ExtensionMethod2().Log()
.ExtensionMethod3().Log();
(需要通用参数,以便可以在不进行强制转换的情况下使用返回值)
LINQPad的Dump()
方法的工作方式相同。