protected void Button1_Click(object sender, EventArgs e)
    {
        string s = null;
        this.ChangeString(ref s);
        this.TextBox1.Text = s;
    }
    protected void ChangeString(ref string s)
    {
        s = "C#高级编程";
    }
从上面的代码得出的结果,string 是可空类型,不知道这个结论对不.

解决方案 »

  1.   

    当然不对...可空类型是泛型类型...而string可以为null的唯一理由...因为它是引用类型...认真看看书...
      

  2.   

    string是引用类型,本来就可以为null
    只有对值类型而言,才存在可空值类型
    比如int,bool,Point等
      

  3.   

    可空类型是针对值类型说的,是因为值类型在有可空类型之前是不可以赋值为null的
    引用类型是可以赋值null的,string是引用类型.NET2.0加入了可空类型,解决了值类型赋值null的问题,用?就可以了int ? aa=null;创建一个可空类型的整形变量。下面的是另一种写法System.Nullable<int>  bb=null;
      

  4.   

    有这样一个实验,它的实参就改变了.
      protected void Button1_Click(object sender, EventArgs e) 
        { 
            string s = ""; 
            this.ChangeString(s); 
            this.TextBox1.Text = s; 
        } 
        protected void ChangeString(string s) 
        { 
            s = "C#高级编程"; 
        } 
      
    执行完的结果TextBox的值还是空串   protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable dataTable = new DataTable();
                this.GetData(dataTable);
                this.GridView1.DataSource = dataTable;
                this.GridView1.DataBind();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void GetData(DataTable dataTable)
        {
            try
            {
                using (SqlConnection sqlConn = new SqlConnection("server=localhost;database=northwind;uid=sa;pwd=sa"))
                {
                    sqlConn.Open();
                    SqlCommand sqlCmd = new SqlCommand("Select top 10 * from Customers order by CustomerID",sqlConn);
                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCmd);
                    sqlAdapter.Fill(dataTable);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
     而在这里this.GridView1的记录确有了,为什么都是返回值类型,结果却不同呢?
      

  5.   


     发表于:2008-08-03 15:43:045楼 得分:0 
    有这样一个实验,它的实参就改变了. 
      protected void Button1_Click(object sender, EventArgs e) 
        { 
            string s = ""; 
            this.ChangeString(s); 
            this.TextBox1.Text = s; 
        } 
        protected void ChangeString(string s) 
        { 
            s = "C#高级编程"; 
        } 
      
    执行完的结果TextBox的值还是空串   protected void Button1_Click(object sender, EventArgs e) 
        { 
            try 
            { 
                DataTable dataTable = new DataTable(); 
                this.GetData(dataTable); 
                this.GridView1.DataSource = dataTable; 
                this.GridView1.DataBind(); 
            } 
            catch (Exception ex) 
            { 
                throw ex; 
            } 
        } 
        public void GetData(DataTable dataTable) 
        { 
            try 
            { 
                using (SqlConnection sqlConn = new SqlConnection("server=localhost;database=northwind;uid=sa;pwd=sa")) 
                { 
                    sqlConn.Open(); 
                    SqlCommand sqlCmd = new SqlCommand("Select top 10 * from Customers order by CustomerID",sqlConn); 
                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCmd); 
                    sqlAdapter.Fill(dataTable); 
                } 
            } 
            catch (Exception ex) 
            { 
                throw ex; 
            } 
        } 
    而在这里this.GridView1的记录确有了,为什么都是引用类型,参数的传递方式却有所不同呢? 
     
      

  6.   

    这还无满意答案?楼主,你是想被举报啊?string本来就被设计成不可变的,但这不能改变它是引用类型的事实那么多引用类型,你偏偏找个最特殊的?