-3

我目前正在尝试使用一个字符串数组,其中填充了 A 类中 B 类的值。

我试图复制数组

string[] playerHand2 = new string[5];
Array.Copy(Deck.playerHand, playerHand2, 5);

但是,当我尝试像这样显示内容时出现空引用异常:

Console.WriteLine("Players hand:");
foreach (var item in playerHand2)
{
      Console.Write(item.ToString());
}

非常感谢任何为我指出正确方向的广告。

4

3 回答 3

1

其中一项Deck.playerHand已经为空。

这个空值被复制到playerHand2.

当迭代playerHand2,null.ToString()被调用,导致你的NullReferenceException.

您可以使用以下方法检查空值:

bool hasNulls = Array.IndexOf(Deck.playerHand, null) > 0;

或使用 LINQ:

bool hasNulls = Deck.playerHand.Any(s => s == null);
于 2013-05-05T09:47:50.253 回答
1

以下代码对我来说非常好:

    string[] playerHand = new string[7] { "1", "2", "3", "4", "5", "6", "7" };
    string[] playerHand2 = new string[5];
    Array.Copy(playerHand, playerHand2, 5);

    Console.WriteLine("Players hand:");
    foreach (var item in playerHand2)
    {
        Console.Write(item.ToString());
    }

你真的用有效数据填充了你的数组'playerHand'吗?否则,请确保“playerHand”数组中没有空值,并且“playerHand”的大小必须至少与“playerHand2”一样大。

否则你可以简单地避免这种情况

 foreach (var item in playerHand2)
        {
            if (string.IsNullOrEmpty(item)) { continue; }
            Console.Write(item.ToString());
        }
于 2013-05-05T09:49:39.297 回答
1

您无需复制 Array 即可使用它,将字符串转换为字符串也无济于事。

您可以简单地使用:

foreach (var item in Deck.playerHand)
{
   Console.WriteLine(item);
}

通常,您也可以null使用以下内容用“”覆盖:

for(int x = 0; x < Deck.playerHand.Length; x++)
{
   if(Deck.playerHand[x] == null)
   {
      Deck.playerHand[x] = " ";
   }
}

结合起来给出以下代码:

for(int x = 0; x < Deck.playerHand.Length; x++)
{
   if(Deck.playerHand[x] == null)
   {
      Deck.playerHand[x] = " ";
   }
   Console.WriteLine(Deck.playerHand[x]);
}

甚至更紧凑,请参阅@saravanan:

foreach(string item in Deck.playerHand)
{
   Console.Write(!string.IsNullOrEmpty(item)?item.ToString():"");
}
于 2013-05-05T09:53:09.607 回答