0

为什么我的代码数组值总是包含“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 中,它会写入值..

之前谢谢你

4

3 回答 3

7

这是因为您没有填充数组。在该方法中,您将用一个全新的数组替换局部变量持有的(对数组的引用) 。这种变化显然不能停留在该方法之外。 Number

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

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

或者

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

然后按如下方式调用它:

Util.SetNumber(Input, ref Number);

这里的另一个(可能更好)选项是使用out而不是refasout不需要您初始化作为参数传递的变量,因此您不需要这样做char [] Number = new char[3];并且可以直接使用char [] Number;和传递它而无需进一步初始化。话虽如此,当您使用时,out必须在方法中为其分配一个值,因此取决于它的复杂程度,这可能可行,也可能不可行。

这是Jon Skeet关于 C# 中参数传递的一篇不错的文章(您可能已经在此站点上看到过他的一两个答案)。

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

于 2013-06-03T06:10:18.283 回答
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

于 2013-06-03T06:15:40.943 回答
0

您可以完全摆脱 Util 类

string input = Console.ReadLine();

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

Console.ReadKey(); 
于 2013-06-03T07:12:26.377 回答