c# - 多次处理对象

标签 c# visual-studio dispose using

我是一名开发人员,负责维护并不断使应用程序更快更好。我遇到了一段使用 .Dispose() 的代码,它位于 using 语句中。

代码如下:

using (IDbCommand cmd = proxy.Connection.CreateCommand())
{
   cmd.CommandText = "usp_GetPluginInfo";
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.Add(proxy.Connection.CreateParameter(cmd, "@dealershipId", dealershipId));
   cmd.Parameters.Add(proxy.Connection.CreateParameter(cmd, "@pluginId", pluginId));
   PluginInfo[] pluginInfos = PopulatePluginsFromCommand(cmd);
   result = pluginInfos.First();
   cmd.Dispose();
}

最后一个 不会在命令完成时处理吗?我认为在这种情况下没有必要使用 Dispose()

感谢您的帮助!

最佳答案

你是对的,没有必要。 using 语句由编译器翻译为:

IDbCommand cmd = proxy.Connection.CreateCommand();

try
{    
    //...
}
finally
{
    if(cmd != null)
        ((IDisposable)cmd).Dispose();
}

话虽如此,多次调用 Dispose不应该“有害”,因为正确的 IDisposable 实现应该是幂等的。但是,它是多余的,您应该删除它,因为您正在清理代码。

关于c# - 多次处理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20253268/

相关文章:

c# - 我可以强制后代拥有无参数构造函数吗?

c# - 使用 ASP.NET WebAPI v2,如何在 WebAPI 方法中发布 PDF 数据?

c# - 将非托管 EXE 作为资源合并到托管 C# 代码中

javascript - 当您关闭浏览器选项卡时,JavaScript 计时器是否会立即清理?

c# - Winforms 设计器生成的组件 IContainer 的用途是什么?

.net - 包含 using 语句的单元测试方法

c# - 将 SalesForce 日历与 Google 日历同步

c - 使用 VS Studio 调试非常大的文件

visual-studio - 升级一个非常旧的 SVN 存储库

c# - Blazor 错误 400,ReasonPhrase 错误请求版本 : 1. 1 System.Net.Http.BrowserHttpHandler