我怎样才能使用其他类的数组?

时间:2013-05-05 09:41:45

标签: c#

我目前正在尝试使用填充了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());
}

非常感谢任何指导我正确方向的人。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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());
        }

答案 2 :(得分:1)

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

您可以简单地使用:

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():"");
}