数组中的ArgumentNullException,我无法弄清楚

时间:2012-07-28 10:36:42

标签: c#

我已经半夜了,仍然试图弄清楚这个空例外。我已经阅读了一些关于这个问题的文章,但没有一个对我有任何帮助,对我来说问题是什么应该有效:/它只是在这段代码崩溃了:

Private void UpdateGUI()
{
    string selectedItem  = cmbDisplayOptions.Items[cmbDisplayOptions.SelectedIndex].ToString();
    rdbtReserv.Checked = true;            
    lstReservations.Items.Clear();           
    lstReservations.Items.AddRange(m_seatMngr.GetSeatInfoStrings(selectedItem));
}

lstReservations.Items.AddRange(m_seatMngr.GetSeatInfoStrings(selectedItem));给我ArgumentNullExeption,但对我来说不应该这样做。

addrange将字符串selectedItem发送到另一个类:

    public string[] GetSeatInfoStrings(string selectedItem)
    {
        int count = GetNumOfSeats(selectedItem);

        if (count <= 0)
        {
            return null;
        }

        string[] strSeatInfoStrings = new string[count];

        for (int index = 0; index <= m_totNumOfSeats - 1; index++)
        {
            strSeatInfoStrings[index] = GetSeatInfoAt(index); 
        }

        return strSeatInfoStrings;

    }

int count = GetNumOfSeats(selectedItem);转到此处并返回int:

    private int GetNumOfSeats(string selectedItem)
    {
        if (selectedItem == "ReservedSeats")
        {
            return GetNumReserved();
        }
        if (selectedItem == "VacantSeats")
        {
            return GetNumVacant();
        }
        else
        {
            return m_totNumOfSeats;
        }
    }

我已经检查过arrayed有正确的空格数(60)并且selectedItem有一个字符串(Allseats开头所以它应该返回m_totnumOfSeats这是一个60的int)但是那么在private int GetNumOfSeats出现问题,它返回null并且......为什么?

我看不出问题..试图找到问题可能会失明。总是得到很好的帮助,我已经学到了很多!所以也许有人可以指出我的代码中存在的所有问题。

预先感谢一百万人提出任何建议!

//此致

2 个答案:

答案 0 :(得分:3)

查看ObjectCollection的源代码,当您调用AddRange并传递空值时,将返回ArgumentNullException。

您可以阻止此更改此代码

if (count <= 0) 
{ 
    return new string[0]; 
} 

答案 1 :(得分:3)

检查您的变量是否实际初始化并返回正确的值。

GetSeatInfoStrings方法和GetNumofSeats方法中存在逻辑错误。

幸运的是,GetNumOfSeats方法将始终为您返回60,因为您比较字符串的方式有误。这不是正确的方法,所以使用Equals方法进行比较,如

 if (selectedItem.Equals("ReservedSeats"))

通过这种方式,您将获得GetNumOfSeats(string)方法的正确输出。

接下来就是在GetSeatInfoStrings方法中修复循环,以便不会像这样得到数组索引超出范围的异常。

    string[] strSeatInfoStrings = new string[count];

    for (int index = 0; index <= count; index++)
    {
        strSeatInfoStrings[index] = GetSeatInfoAt(index); 
    }

    return strSeatInfoStrings;

还要修复GetSeatInfoStrings方法中逻辑返回null的部分。它应该根据你的逻辑

返回一个空字符串数组
    return new string[0];

这应该可以使你的方法有效。在调试它之前,你需要非常小心你的代码:-)