例如,我有下面一小段代码,可以运行没有问题:    class Program
    {
        static void Increment(out int i,int inc=4)
        {
            i = 4;
        }
        static void Main(string[] args)
        {
            int i = 2;
            Increment(out i);
        }
    }可是如果我把Increment函数做个修改:        static void Increment(out int i,int inc=4)
        {
            i += inc;
        }这下编译就有错误了error CS0269: Use of unassigned out parameter 'i'
error CS0177: The out parameter 'i' must be assigned to before control leaves the current method
这是为什么呢? 我想做的只是把i的赋值变成了+=。而传入之前的i是已经有值的。再说int本身也是一种值对象而不是引用对象啊。我的需求就是设计一个Increment函数,让输入输出参数增加某个数值。难道C#做不到这一点么?
我的程序改怎么改?

解决方案 »

  1.   

    out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值。
    那么你的第二个例子里面当使用+=的时候 需要对i重新赋值在使用.
      

  2.   

    out只传出,不传入。
    你要的是传出+传入, out换成ref就好了
      

  3.   


    static void Increment(out int i,int inc=4)
    {
         i += inc;  等价于 i=i+inc; //i没赋值,所以出错了
    }
      

  4.   

     static int x = 0;
            static void Increment(int j, out int i, int inc = 4)
            {
                i = j;
                j += inc;
            }
            static void Main(string[] args)
            {
                int i = 2;
                Increment(i, out x);
            }