好吧,如果你发现自己经常这样做,你可以这样做:
public delegate void OutAction(out T value); public TResult UseOut (OutAction outAction, Func selector) { TIntermediate tmp; outAction(out tmp); return selector(tmp); }
然后调用它(注意doStuff
这里是一个方法组 - 缺乏()是故意的!):
Thing someThing = UseOut(doStuff, x => new Thing(x));
我不一定说这是一个好主意,只需考虑一下.
编辑:当你开始获得多个参数时,它变得更加困难 - 因为out参数可能是第一,第二,第三,第四等...
编辑:稍微简单的版本:
public TResult ReturnOut(OutAction outAction) { TResult tmp; outAction(out tmp); return tmp; }
用法:
Thing someThing = new Thing(ReturnOut(doStuff));