C#无法遍历字符串数组

时间:2013-05-14 21:17:06

标签: c#

我正在尝试遍历字符串数组,如果它包含某个字符串,则将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] == "")
            {
            }
        }

5 个答案:

答案 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;
    }
}