我应该如何正确地处理一个对象
本文关键字:处理 一个对象 正确地 我应该 | 更新日期: 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垃圾收集器会完成其余的工作。