【发布时间】:2017-09-26 12:21:13
【问题描述】:
假设我有一个方法foo,它返回一个ValueTuple,其中一个成员是一次性的,例如(IDisposable, int)。
确保返回的一次性对象在调用方正确处理的最佳方法是什么?
我尝试了以下方法:
using (var (disposable, number) = foo())
{
// do some stuff using disposable and number
}
但这不会编译:
'(IDisposable Disposable, int number)':在 using 语句中使用的类型必须隐式转换为 'System.IDisposable'
我真的需要将我的代码包装在一个 try-finally 块中,并在 finally 块中显式地处理我的对象,还是有更好的方法来做到这一点?
实际上,我希望看到新的 ValueTuples 实现 IDisposable 接口并在其所有一次性成员上调用 Dispose()。这对微软来说是一个有价值的功能请求吗?
【问题讨论】:
-
何时会在此 IDisposable ValueTuple 上调用 Dispose?甚至垃圾收集器也不会调用 Dispose。如果您希望垃圾收集器触发它,您必须编写该代码并至少将其放入终结器中。
-
如果你应该实现 IDisposable 那么就不要使用元组。
标签: c# using idisposable valuetuple