c# – 对象未沿所有执行路径布置

c# – 对象未沿所有执行路径布置,第1张

概述我有以下代码. private DataTable LoadSMSCellProviders(){ string sqlQuery = "Select * from SMSAddress"; DataTable dt = new DataTable(); using (SqlConnection conn = new SqlConnection(Utility.ConnS 我有以下代码.
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没有沿所有执行路径处理,但我不知道如何纠正这个问题.如果我在返回之前尝试调用dispose,它将返回一个null值,如果我尝试在方法结束时执行它,则代码永远不会到达…

我在这里错过了什么?

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

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# – 对象未沿所有执行路径布置全部内容,希望文章能够帮你解决c# – 对象未沿所有执行路径布置所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1248943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存