0

我已经睡了半夜,仍然试图弄清楚这个空异常。我已经阅读了一些关于这个问题的文本,但没有一个对我有任何帮助,对我来说问题是什么,因为它应该起作用:/它只是在这段代码中崩溃:

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

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

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

预先感谢一百万的任何和所有建议!

//问候

4

2 回答 2

3

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

您可以阻止这种更改此代码

if (count <= 0) 
{ 
    return new string[0]; 
} 
于 2012-07-28T10:45:01.873 回答
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];

这可能会让你的方法起作用。在调试之前,您需要非常小心您的代码:-)

于 2012-07-28T11:20:44.503 回答