循环遍历数组c#

时间:2015-01-31 20:38:18

标签: c# arrays loops casting

在我的Tic Tac Toe游戏中,我有一个声明如下的数组:

static char[] boardArray = new char[9]{ '0', '1', '2', '3', '4', '5', '6', '7', '8'};

我有一个

private static void resetBoard(ref char[] arr)
{
for(int i = 0; i < 9; i++) {
    arr[i] = (char)i;
    }
}

然而,当我称这种方法时:

resetBoard(ref boardArray);

它将所有数组值设置为空char。 为什么会这样?

3 个答案:

答案 0 :(得分:4)

我没有将它们设置为空,而是设置为ASCII值0 - 9,这与字符&#39; 0&#39; - &#39; 9&#39;。

你想要什么:

for(int i = 0; i < arr.Length; i++) 
{
   arr[i] = (char)(i + '0');
}

顺便说一句,

  • 这里你不需要ref,数组是引用类型。
  • 使用arr.Length更清晰,可能更快

答案 1 :(得分:1)

这里发生了一些事情。

(1)您不需要使用ref。无论如何,数组都是通过引用有效传递的。这意味着你在一个接受数组的函数中所做的任何更改对于函数的调用者都是显而易见的。没有制作副本。

(2)您正在为您的阵列分配ASCII(实际上是Unicode,但这里不相关)代码0到8。我假设你想要实际的数字,这将是其他的东西。在这种情况下,请使用此代码,它将整数i转换为字符串并获取该字符串的第一个字符(无论如何只会有一个字符):

arr[i] = i.ToString()[0];

(3)确保在arr.Length循环中使用for,因为它允许您更改数组的大小,而无需同时更新for循环中的代码。通常,请避免在代码中使用01以外的常量(与所有规则一样,有很多例外)。

答案 2 :(得分:1)

简单回答,使用arr[i] = char.Parse(i.ToString());而不是arr[i] = (char)i;