日期:2014-05-17  浏览次数:21200 次

在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&nb