我目前正在尝试使用填充了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());
}
非常感谢任何指导我正确方向的人。
答案 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():"");
}