我该如何正确处理一个物体?

时间:2014-06-26 21:50:05

标签: c# object dispose

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

SqlCommand vCmd = null;

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

这是释放对象和处理对象的最佳方法吗?

我正在使用VS分析并向我发出关于裁员的警告。但我总是这样做......

2 个答案:

答案 0 :(得分:4)

就可读性而言,最好的方法是使用using statement

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

即使出现错误也会处置对象,因此类似于finally。当对象实现IDisposable时,您应该始终使用它,这表明它使用非托管资源。

进一步阅读:

答案 1 :(得分:2)

以下是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();
        }
    }
}

注意使用"使用"用于连接。

回到COM / ActiveX的旧日,您需要将对象设置为" Nothing"。

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

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

停止使用它 - 并信任.Net垃圾收集器来完成剩下的工作。