我正在尝试遍历字符串数组,如果它包含某个字符串,则将1添加到整数但是我在if语句中收到错误说:
NUllReferenceException is unhandled
Object reference not set to an instance of an object
/
for (int i = 0; i < GlobalData.CellH.Length; i++)
{
if (GlobalData.CellH[i].Contains("M"))
{
GlobalData.TotalBoys++;
}
else if (GlobalData.CellH[i].Contains("F"))
{
GlobalData.TotalGirls++;
}
else if (GlobalData.CellH[i].Contains(null))
{
}
}
FIXED:
for (int i = 0; i < GlobalData.CellH.Length; i++)
{
if (GlobalData.CellH[i] == "M")
{
GlobalData.TotalBoys++;
}
else if (GlobalData.CellH[i] == "F")
{
GlobalData.TotalGirls++;
}
else if (GlobalData.CellH[i] == "")
{
}
}
答案 0 :(得分:4)
您的最低条件需要位于顶部并进行修改:
for (int i = 0; i < GlobalData.CellH.Length; i++)
{
if (GlobalData.CellH[i] == null)
{
continue;
}
else if (GlobalData.CellH[i].Contains("M"))
{
GlobalData.TotalBoys++;
}
else if (GlobalData.CellH[i].Contains("F"))
{
GlobalData.TotalGirls++;
}
}
另请注意,这可以通过一些Linq语句来完成:
GlobalData.TotalBoys = GlobalData.CellH.Count(s => s != null && s.Contains("M"));
GlobalData.TotalGirls = GlobalData.CellH.Count(s => s != null && s.Contains("F"));
答案 1 :(得分:1)
检查CellH
是否为null
。
此外,else if (GlobalData.CellH[i].Contains(null))
会导致您的例外
答案 2 :(得分:0)
您需要先执行空检查,所以请尝试以下方法:
for (int i = 0; i < GlobalData.CellH.Length; i++)
{
if (GlobalData.CellH[i] == null)
{
}
else if (GlobalData.CellH[i].Contains("M"))
{
GlobalData.TotalBoys++;
}
else if (GlobalData.CellH[i].Contains("F"))
{
GlobalData.TotalGirls++;
}
}
另外,检查是否与null相等,而不是检查字符串是否包含null。
答案 3 :(得分:0)
如果您的CellH为空,则会发生这种情况。
要么消除填充数组的错误,要么使用此代码避免错误:
if (GlobalData.CellH[i] != null)
{
// your code
}
或者更好的方法是使用String.IsNullOrEmpty。然后检查NULL以及它是否为空:
if (!String.IsNullOrEmpty(GlobalData.CellH[i])
{
// your code
}
答案 4 :(得分:0)
使用foreach
,这是有原因的。
// If necessary, first check if GlobalData == null
// and if GlobalData.CellH == null. Then:
foreach (var str in GlobalData.CellH)
{
if (str == null)
{
// ...
}
else if (str.Contains("M"))
{
GlobalData.TotalBoys++;
}
else if (str.Contains("F"))
{
GlobalData.TotalGirls++;
}
}
请注意,如果某个数组条目包含两个字母,则只会增加男孩数。
也许(?!)这就是你的意思:
foreach (var str in GlobalData.CellH)
{
switch (str)
{
case "M":
GlobalData.TotalBoys++;
break;
case "F":
GlobalData.TotalGirls++;
break;
default: // includes case where str == null
// ...
break;
}
}