我应该如何正确地处理一个对象

本文关键字:处理 一个对象 正确地 我应该 | 更新日期: 2023-09-27 18:10:23

我经常使用以下代码(或类似代码)来处理对象:

SqlCommand vCmd = null;
try 
{
    // CODE
}
catch(Exception ex) { /* EXCEPTION HANDLE */ }
finally 
{
    if (vCmd != null) 
    {
        vCmd.Dispose();
        vCmd = null;
    }
}

这是释放和处置对象的最佳方式吗?

我正在使用VS分析,给我一个关于冗余的警告。但我总是这样做的

我应该如何正确地处理一个对象

在可读性方面最好的方法是使用using语句:

using(SqlCommand vCmd = new SqlCommand("...", connection)
{
    try 
    {
        // CODE
    }
    catch(Exception ex) 
    { 
        // EXCEPTION HANDLE
    }
}

即使在错误的情况下也会处理对象,因此类似于finally。当一个对象实现IDisposable时,你应该总是使用它,这表明它使用非托管资源。

进一步阅读:

  • 清理未管理的资源
  • 不需要将对象设置为null

以下是来自MSDN的示例:

private static void ReadOrderData(string connectionString)
{
    string queryString = 
        "SELECT OrderID, CustomerID FROM dbo.Orders;";
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(
            queryString, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
        }
        finally
        {
            // Always call Close when done reading.
            reader.Close();
        }
    }
}

注意连接中使用了"using"

在过去的COM/ActiveX时代,你需要设置你的对象为"Nothing"

在托管代码中,这不再需要。

您既不应该调用"Dispose()",也不应该将sqlCommand设置为"null"。

只要停止使用它-并相信。net垃圾收集器会完成其余的工作。