数组值始终为"0"

0 c#

为什么我的代码数组值总是包含"0"?

        static void Main(string[] args)
        {
            string Input = Console.ReadLine();
            char[] Number = new char[3];
            Util.SetNumber(Input,Number);
            foreach (char digit in Number)
            {
                Console.WriteLine(digit);
            }
            Console.ReadKey();            
        }
Run Code Online (Sandbox Code Playgroud)

这是班级:

    class Util
    {
        public static void SetNumber(string Input,char[] Number)
        {            
            Number = Input.ToCharArray();                   
        }

    }
Run Code Online (Sandbox Code Playgroud)

但是,如果将"foreach"部分放在Util.cs中,它会写出值.

谢谢你,

Joe*_*oey 7

这是因为你没有填充数组.在该方法中,您将使用全新数组替换局部变量所拥有的(对数组的引用).这种变化显然不能保持在那种方法之外. Number

您可以使用Array.Copy或传递Numberref:

Array.Copy(Input.ToCharArray(), Number, 3);
Run Code Online (Sandbox Code Playgroud)

要么

public static void SetNumber(string Input, ref char[] Number)
{
    Number = Input.ToCharArray();
}
Run Code Online (Sandbox Code Playgroud)

然后按如下方式调用它:

Util.SetNumber(Input, ref Number);
Run Code Online (Sandbox Code Playgroud)

这里的另一个(可能更好)选项是使用out而不是ref因为out不要求你初始化作为参数传递的变量,所以你不需要做char [] Number = new char[3];,只需使用char [] Number;并传递它而无需进一步初始化.话虽这么说,当你使用时,out必须在方法中为它分配一个值,所以取决于它可能会或可能不可行的复杂程度.

这里有一个关于参数传递在C#中一个很好的书面记录乔恩斯基特(你可能已经看到了他的一个或两个答案在本网站).

次要注意:也许这是一个刻意的决定,但是你的变量名不符合C#代码指南,该指南规定字段,方法参数和局部变量必须使用camelCase命名.PascalCase保留用于类型,方法和属性.