0

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

固定的:

 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] == "")
            {
            }
        }
4

5 回答 5

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"));
于 2013-05-14T21:22:52.893 回答
1

检查是否CellHnull.

另外,else if (GlobalData.CellH[i].Contains(null))会导致你的异常

于 2013-05-14T21:19:47.237 回答
0

您需要先执行 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++;
        }
    }

您还检查是否与 null 相等,而不是检查字符串是否包含 null。

于 2013-05-14T21:20:25.213 回答
0

如果您的 CellH 为空,则会发生这种情况。

要么消除填充数组的错误,要么使用以下代码避免它:

if (GlobalData.CellH[i] != null)
{
// your code
}

或者更好的方法是使用 String.IsNullOrEmpty。然后检查 NULL 是否为空:

if (!String.IsNullOrEmpty(GlobalData.CellH[i])
{
// your code
}
于 2013-05-14T21:20:44.563 回答
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;
    }
}
于 2013-05-14T21:37:07.157 回答