3 ms·
> You can move the burden of disposing to the caller (return the disposable object and let the caller put it in a using statement). That doesn't help. Not if t
by mort96 10mo ago
> You can move the burden of disposing to the caller (return the disposable object and let the caller put it in a using statement).
That doesn't help. Not if the function that wants to return the disposable object in the happy path also wants to destroy the disposable object in the error path.
- brewmarche 10mo agoYou have to write a disposable wrapper to return. Return it in error case too. readonly record struct Result<TResult, TDisposable>(TResult? IfHappy, TDisposable? Disposable): IDisposable where TDisposable : IDisposable { public void Dispose() => Disposable?.Dispose(); }
- brewmarche 10mo agoUsage at call site: using (var result = foo.GetSomethingIfLucky()) { if (result.IfHappy is {} success) { // do something } }