C#Can';t遍历字符串数组

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

我试图遍历一个字符串数组,如果它包含某个字符串,则将1添加到整数中,但在if语句中得到一个错误,该错误表示:

 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示例更多地是一个说明,而不是一个“最佳”解决方案。