我想知道是否有某种方法可以优化using语句,以声明并一起分配其输出(当它是单个值时)。

例如,类似于内联的新方法声明了out参数的结果变量。

//What I am currently doing:
string myResult;
using(var disposableInstance = new myDisposableType()){
    myResult = disposableInstance.GetResult();
}

//That would be ideal
var myResult = using(var disposableInstance = new myDisposableType()){
    return disposableInstance.GetResult();
}

//That would be great too
using(var disposableInstance = new myDisposableType(), out var myResult){
    myResult = disposableInstance.GetResult();
}

感谢您的输入。

最佳答案

您可以使用扩展方法来“简化”此使用模式:

public static class Extensions {
    public static TResult GetThenDispose<TDisposable, TResult>(
        this TDisposable d,
        Func<TDisposable, TResult> func)
            where TDisposable : IDisposable {

        using (d) {
            return func(d);
        }
    }
}

然后,您可以像这样使用它:
string myResult = new myDisposableType().GetThenDispose(c => c.GetResult());

10-05 23:47