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对象会被释放嘛?

解决方案 »

  1.   

    使用ILDasm.exe看一下IL就一目了然了。
      

  2.   

    会的,
    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;
      

  3.   

    using 编译后就是上面的样子
      

  4.   

    这就好比问
    try
    {}
    catch
    {
        return
    }
    finally
    {}这就好比问请问finally中的代码会执行么?假设catch被触发。