首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在using代码块里return , using里的对象会被开释吗

2013-03-25 
在using代码块里return , using里的对象会被释放吗? public User Login(string UserName, string Password

在using代码块里return , using里的对象会被释放吗?


 public User Login(string UserName, string Password)
        {
            string sql = string.Format("select top 1 Id,UserName,Password,ImageHead,IPAddress,Signature from Tab_Users where UserName=@UserName and Password=@Password", UserName, Password);
            using (DataTable dt = DBHelper.ExecDataTable(sql, CommandType.Text, null))
            {
                if (dt.Rows.Count > 0)
                {
                    DataRow dr = dt.Rows[0];
                    User u = new User()
                    {
                        Id = Convert.ToInt32(dr["Id"]),
                        UserName = dr["UserName"].ToString(),
                        Password = dr["Password"].ToString(),
                        IPAddress = dr["IPAddress"].ToString(),
                        Signature = dr["Signature"].ToString(),
                        ImageHead = (byte[])dr["ImageHead"]
                    };
                    return u;
                }
            }
            return null;
        }


如上代码, 在执行return u之后, using里的dt对象会被释放嘛?
[解决办法]
使用ILDasm.exe看一下IL就一目了然了。
[解决办法]
会的,
DataTable dt =null;
try{ 
    dt= DBHelper.ExecDataTable(sql, CommandType.Text, null)
     if (dt.Rows.Count > 0)
     {
         ///.....
         return u;
      }


 }
finally{
这里会在return u前执行
if(dt!=null){
     dt.dispose();
   }
}
return null;

热点排行