有如下的程序 :
   private void button1_Click(object sender, EventArgs e)
   {
       int a = 0;
       sd(a);
       textBox1.Text = a.ToString();
    }
    private void  sd(int b)
    {
       b =b+ 1;
    }
程序运行之后,结果并不是我想象的1,而是0,这是怎么回事呢?

解决方案 »

  1.   

      private void button1_Click(object sender, EventArgs e)
      {
      int a = 0;
      
      textBox1.Text = sd(a).tostring();
      }
      private int sd(int b)
      {
       return b+ 1;
      }
      

  2.   


      private void button1_Click(object sender, EventArgs e)
      {
      int a = 0;
      sd(ref a);
      textBox1.Text = a.ToString();
      }
      private void sd(ref int b)
      {
      b =b+ 1;
      }
      

  3.   

    或者
    private void button1_Click(object sender, EventArgs e)
      {
      int a = 0;
      sd(out a);
      textBox1.Text = a.ToString();
      }
      private void sd(out int b)
      {
      b =b+ 1;
      }
      

  4.   

    bdmh的回答是可以实现的,但我以前甚至就是前两天编的另外一个程序都可以按照我写的方法实现,而不用加ref关键词的,会不会是我的vs2008编译环境变了?
      

  5.   


            private int sd(int b)
            {
               return  b = b + 1;
            }
      

  6.   

    因为在我实际的程序中需要通过函数返回几个值,而不是一个值,所以在这里用return不太好。关键是以前好好的函数,怎么就没用了?在我的程序中加上ref竟然报错,说是属性值或者是索引值不能用ref或out关键字来引用,麻烦。我的程序采用了自定义类
      

  7.   


            private void button1_Click(object sender, EventArgs e)
            {
                int a = 0;
                sd(ref a);
                textBox1.Text = a.ToString();
            }        private void sd(ref  int b)
            {
                b +=  1; 
            }
      

  8.   

    用ref传参数也可以的。我刚才测试了