【问题标题】:C# not able to dispose resource in catch{} statement [closed]C# 无法在 catch{} 语句中处理资源 [关闭]
【发布时间】:2014-10-20 04:56:49
【问题描述】:

我在 try 块中打开了一个 excel 文件。

然后在catch块中,我放了一条语句,只要excel应用程序出现异常就关闭那个excel文件。我什至尝试过finally,它也不起作用。

似乎有一条错误消息指出该变量在当前上下文中不存在。

出现异常时如何关闭excel?

【问题讨论】:

  • 贴出代码!!!!!!!!!!!!
  • 请发布代码、准确的错误消息、指向 MSDN 的链接,解释该特定错误消息以及确切需要解释的内容。
  • try {..} 块中声明的变量将不在catch {..} 块的范围内。在try之前声明变量。
  • 贴一些代码!如果您的对象包含实现的IDisposable 接口,您可以在using(obj) 块中使用它。

标签: c# exception try-catch dispose


【解决方案1】:

我在 try 块中打开了一个 excel 文件。

try 块之前打开 excel 文件。这将允许它在catch 部分期间处于范围内。如果您打算始终关闭它,只需将逻辑放在 finally 块中,因为无论是否发生异常都会发生这种情况。

// Open file..
try
{
    // use file
}
finally
{
    // close here
}

【讨论】:

  • 最好在try 之前声明并在try 中打开实例并打开?我的意思是,如果打开的过程中出现一些错误,可以在catch块中处理。
  • @FelipeOriani 取决于您的逻辑 - 它可以工作,但通常“开放”是构造函数。如果这样做,则需要在处置部分检查 null。
  • 是的,我同意你的@ReedCopsey :)
【解决方案2】:

根据你的说法,我相信你的问题是这样的:

try
{
     // Do Stuff.
}

catch
{
     // Close my connection.
}

这种方法无效,原因是catch 不会真正实现,除非发生错误。因此,您需要在代码的 trytry catch 部分之外发布您的收盘价。

但是,您应该发布代码,因为您的答案会因您的结构、实现和代码的整体流程而异。正如您将要考虑的那样,C# 具有自动垃圾收集和其他几个变量。

你可能想把它想象成:

value = 3;
if (value == 0) 
{
   value = 1;
}
else if (value == 1)
{
     value = 1;
}
else
{  
     value = 5;
}

value 等于 5,原因是 value 在其他范围内不符合条件。所以它将落在else 括号中。同样适用于try catch。除非catch 被异常触发,否则您的代码将永远不会进入该特定代码块的范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 2016-03-15
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多