C#Can';t遍历字符串数组
我试图遍历一个字符串数组,如果它包含某个字符串,则将1添加到整数中,但在if语句中得到一个错误,该错误表示:C#Can';t遍历字符串数组,c#,C#,我试图遍历一个字符串数组,如果它包含某个字符串,则将1添加到整数中,但在if语句中得到一个错误,该错误表示: NUllReferenceException is unhandled Object reference not set to an instance of an object / for(int i=0;i
NUllReferenceException is unhandled
Object reference not set to an instance of an object
/
for(int i=0;i
固定:
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] == "")
{
}
}
for(int i=0;i
检查CellH
是否为null
另外,
else if(GlobalData.CellH[i].Contains(null))
将导致异常检查CellH
是否为null
另外,
else if(GlobalData.CellH[i].Contains(null))
将导致您的异常您需要先执行null检查,因此请尝试以下操作:
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++;
}
}
for(int i=0;i
您还可以检查是否等于null,而不是检查字符串是否包含null。您需要首先执行null检查,因此请尝试以下方法:
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++;
}
}
for(int i=0;i
您还可以检查是否等于null,而不是检查字符串是否包含null。如果单元格为null,则会发生这种情况 在填充数组时消除错误,或使用以下代码避免错误:
if (GlobalData.CellH[i] != null)
{
// your code
}
或者更好的方法是使用String.IsNullOrEmpty。然后检查NULL,如果为空:
if (!String.IsNullOrEmpty(GlobalData.CellH[i])
{
// your code
}
如果单元格为空,则会发生这种情况 在填充数组时消除错误,或使用以下代码避免错误:
if (GlobalData.CellH[i] != null)
{
// your code
}
或者更好的方法是使用String.IsNullOrEmpty。然后检查NULL,如果为空:
if (!String.IsNullOrEmpty(GlobalData.CellH[i])
{
// your code
}
您的底部条件需要位于顶部并进行修改:
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++;
}
}
您的底部条件需要位于顶部并进行修改:
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++;
}
}
使用
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++;
}
}
请注意,如果某个数组条目同时包含两个字母,则只有boys计数将递增
也许(?!)这就是你的意思:
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;
}
}
使用
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++;
}
}
请注意,如果某个数组条目同时包含两个字母,则只有boys计数将递增
也许(?!)这就是你的意思:
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;
}
}
一个或多个数组元素为
null
。找出为什么要使用调试器。还有,.Contains(null)
应该实现什么?@lewsterin-如果GlobalData
或GlobalData.CellH
为null,那么代码根本不会进入循环。啊,我误读了。。sorry@LewsTherin,时间之轮同样适用于迭代;)哦,是的,正如第一章的前两句话提醒我们的那样;)一个或多个数组元素为null
。找出为什么要使用调试器。还有,.Contains(null)
应该实现什么?@lewsterin-如果GlobalData
或GlobalData.CellH
为null,那么代码根本不会进入循环。啊,我误读了。。sorry@LewsTherin,时间之轮同样适用于迭代;)哦,是的,正如第一章的前两句话提醒我们的那样;)LINQ方法多次枚举CellH,如果CellH包含类似于。。。70亿条。此外,您可能希望将赋值更改为+=
,因为OP可能会添加到其他地方获取的数据中。@WilliamMelani是的,可以使用.GroupBy
完成,并且只迭代一次,但在编写时,我认为这并没有节省太多复杂性。我给出的Linq示例与其说是“最佳”解决方案,不如说是一个说明。Linq方法多次枚举CellH,如果CellH包含类似于。。。70亿条。此外,您可能希望将赋值更改为+=
,因为OP可能会添加到其他地方获取的数据中。@WilliamMelani是的,可以使用.GroupBy
完成,并且只迭代一次,但在编写时,我认为这并没有节省太多复杂性。我给出的Linq示例更多地是一个说明,而不是一个“最佳”解决方案。