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中,它会写出值.
谢谢你,
这是因为你没有填充数组.在该方法中,您将使用全新数组替换局部变量所拥有的值(对数组的引用).这种变化显然不能保持在那种方法之外. Number
您可以使用Array.Copy或传递Number为ref:
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保留用于类型,方法和属性.
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |