方法不起作用?

时间:2017-12-01 03:04:09

标签: c#

以下是我遇到一些问题的代码块:

using System;
namespace TestProgram {
    class Test {
        static void Main() {
            int number = 10;
            MultiplyByTen(number);
            Console.WriteLine(number);
            Console.ReadKey(true);
        }
        static public void MultiplyByTen(int num) {
            num *= 10;
        }
    }
}

当我运行这段代码时,我得到10作为输出而不是100.我的问题是:为什么会发生这种情况以及如何解决它? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

问题是当变量号进入方法MultiplyByTen时,值被复制,而你在其中修改的变量实际上就是副本,因此原件没有改变。
试试这个:

 public static void MultiplyByTen(ref int num) 
 {
     num *= 10;
 }

但请记住,您还必须使用ref关键字调用它。

static void Main() 
{
    int number = 10;
    MultiplyByTen(ref number);//Notice the ref keyword here
    Console.WriteLine(number);
    Console.ReadKey(true);
}

我建议您也查看一下:Passing Objects By Reference or Value in C#

答案 1 :(得分:1)

您需要将值返回给函数,并将返回值分配给数字。

  static void Main()
    {
        int number = 10;
        number = MultiplyByTen(number);
        Console.WriteLine(number);
        Console.ReadKey(true);
    }
    static public int MultiplyByTen(int num)
    {
        return num *= 10;
    }

答案 2 :(得分:1)

使用您的实施:

using System;
namespace TestProgram {
    class Test {
        static void Main() {
            int number = 10;
            //MultiplyByTen(number);
            //Console.WriteLine(number);
            Console.WriteLine(MultiplyByTen(number));
            Console.ReadKey(true);
        }
        static public int MultiplyByTen(int num) {
            return num *= 10;
        }
    }
}