gpt4 book ai didi

c# - 对象未沿所有执行路径放置

转载 作者:太空狗 更新时间:2023-10-29 21:22:14 25 4
gpt4 key购买 nike

我有以下代码。

private DataTable LoadSMSCellProviders()
{
string sqlQuery = "Select * from SMSAddress";
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(Utility.ConnString))
{
using (SqlCommand command = new SqlCommand(sqlQuery, conn))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dt);
return dt;
}
}
}

Microsoft Code Analysis 告诉我 dt 并未沿所有执行路径放置,但我不确定如何更正此问题。如果我尝试在 return 之前对其调用 dispose,它将返回一个空值,如果我尝试在该方法的末尾执行此操作,则代码为从未达到...

我在这里错过了什么?

这是来自分析工具的消息:

warning : CA2000 : Microsoft.Reliability : In method 'x.x()', object 'dt' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'dt' before all references to it are out of scope.

最佳答案

需要在异常发生的时候进行处理。像这样。

private DataTable LoadSMSCellProviders()
{
string sqlQuery = "Select * from SMSAddress";
DataTable dt = null;
try
{
dt = new DataTable();
using (SqlConnection conn = new SqlConnection(Utility.ConnString))
{
using (SqlCommand command = new SqlCommand(sqlQuery, conn))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dt);
return dt;
}
}
}
catch
{
if(dt != null)
dt.Dispose();
throw;
}
}

想法是,如果发生异常,则无法处理 DataTable,因为它不会传回给调用者。因此,这种模式将使代码分析变得愉快。

关于c# - 对象未沿所有执行路径放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26934639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com