【发布时间】:2018-06-15 23:57:57
【问题描述】:
我一直在寻找这个问题的答案,但我真的找不到我正在实施的确切案例。我想在一个方法中返回 IDisposable 对象,而不在同一方法中处理/关闭。但我只想在引发异常时处理对象。在这种情况下,最好的处理方法是什么?以下是我目前处理此案的方式。
public DisposableObject GetObject()
{
DisposableObject object = null;
try
{
object = new DisposableObject();
object.Open();
}
catch
{
if (object != null)
{
object.Close();
}
throw;
}
return object;
}
从上述方法创建的对象将被类似这样的其他方法消耗和处置。
public void OtherMethod()
{
using(var object2 = GetObject())
{
DoSomethingWithObject2(object2);
}
}
在这种情况下还有其他选择吗?
【问题讨论】:
-
您不应该在
catch中调用object.Dispose()吗? -
我似乎无法弄清楚为什么有人想要这样做。此外,看起来删除
throw将允许它返回,但不会处理异常。 -
你能提供一个真实的例子吗?此代码甚至不是有效的 C#。如果我们知道您想要完成什么而不是您尝试如何实现它,那么提供答案可能会更容易。
-
这看起来很 XY-ish。一个真实的例子会很棒。
标签: c# exception exception-handling idisposable