为什么我的代码数组值总是包含“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中,则会写入值..
以前谢谢你,
答案 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
时, 在方法中为它分配一个值,所以根据它的复杂程度可能是可行的,也可能是不可行的。
次要注意:也许这是一个慎重的决定,但您的变量名称不符合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();