0

私は夜中起きていましたが、まだこの null 例外を理解しようとしています。私はこの問題についていくつかのテキストを読みましたが、どのような方法でも私を助けてくれるものはありませんでした.問題は何であるか.

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

変数が実際に初期化され、正しい値を返すかどうかを確認してください。

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 に答える
3

ObjectCollection のソース コードを見ると、AddRange を呼び出して null 値を渡すと、ArgumentNullException が返されます。

このコードを変更すると、これを防ぐことができます

if (count <= 0) 
{ 
    return new string[0]; 
} 
于 2012-07-28T10:45:01.873 に答える