数组值始终为“0”

时间:2013-06-03 06:07:02

标签: 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();            
        }

这是班级:

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

    }

但如果将“foreach”部分放在Util.cs中,则会写入值..

以前谢谢你,

3 个答案:

答案 0 :(得分:7)

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

您可以使用Array.Copy或将Number作为ref传递:

Array.Copy(Input.ToCharArray(), Number, 3);

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

然后按如下方式调用它:

Util.SetNumber(Input, ref Number);

此处的另一个(可能更好)选项是使用out代替ref,因为out不要求您初始化作为参数传递的变量,所以你不要需要执行char [] Number = new char[3];并且可以使用char [] Number;并传递它而无需进一步初始化。话虽这么说,当你使用out时, 在方法中为它分配一个值,所以根据它的复杂程度可能是可行的,也可能是不可行的。

Here's a nice writeup on parameter passing in C#的{p> Jon Skeet(您可能在本网站上看到过他的一两个答案)。

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

答案 1 :(得分:3)

更好的实施将是(我认为)

class Util
{
    public static char[] SetNumber(string Input)
    {
        return Input.ToCharArray();
    }

}

    string Input = Console.ReadLine();
    char[] Number = Util.SetNumber(Input);

    foreach (char digit in Number)
    {
        Console.WriteLine(digit);
    }
    Console.ReadKey(); 

同样在原始代码中,您可以删除作业char[] Number = new char[3];,因为您在Util类中创建了新作品

答案 2 :(得分:0)

你可以完全摆脱Util类

string input = Console.ReadLine();

foreach (var digit in input.ToCharArray())
{
        Console.WriteLine(digit);    
}

Console.ReadKey();