-1

Visual C# 2005 で最初にビルドされたプログラムをコンパイルしています。Visual C# 2010 を使用しています。次の関数でプログラムを実行すると、「NullReference Execption was unhandled」エラーが発生し続けます。データバッファ。DataBuffer は、初期化時に null に設定されたプライベート文字列です。

if (DataBuffer.Contains(ok)) 
            {
                okFound = true;
            }

    string temp = getLine(DataBuffer.Substring(mylocation));
    if (!checkTypeFound())
    {
        if (temp != null)
        {
            parseDeviceType(temp);
        }
        checkTypeFound();
    }

上記のコードで DataBuffer の値を確認すると (エラーが発生した場合)、これは null ではありません。実際に私が期待するデータが含まれています。DataBuffer 情報は、次の関数でロードされます。

private void ser1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    while (ser1.BytesToRead > 0)
    {
        string data = ser1.ReadExisting();
        DataBuffer += data;
    }
}

シリアル ポートは、コード内の別の場所で開かれています。コンパイラが異なるだけで、コードに変更はありません。どの行を追加する必要があり、このエラーをどこで解決すればよいですか? if ステートメントと try-catch ステートメントを使用して、このエラーの発生を防ぐことができることに注意してください。しかし、これは私が探しているものではありません。このコードが機能する必要があります。このアプリケーションは、コンパイラー以外の点で変更されていません。

4

3 に答える 3

1

メソッドを呼び出す前に、DataBufferであるかどうかを確認する必要があります。null

if (DataBuffer != null && DataBuffer.Contains(ok)) 
{
    okFound = true;
}

// or simpler:
okFound = (DataBuffer != null && DataBuffer.Contains(ok));

2番目に切り取られたコードもチェックする必要がありますnull

string temp = String.Empty;

if (DataBuffer != null)
    temp = getLine(DataBuffer.Substring(mylocation));

if (!checkTypeFound())
{
    if (!String.IsNullOrEmpty(temp))
        parseDeviceType(temp);

    checkTypeFound();
}
于 2012-09-04T10:10:16.070 に答える
1

以下を使用してみてください。

if (DataBuffer != null && DataBuffer.Contains(ok)) 
{
   okFound = true;
}
于 2012-09-04T10:14:46.553 に答える
0

DataBufferコンストラクターでの値を null 以外に設定する必要があります。それができない場合は、string.Emptynull 例外を回避するために null の代わりに設定できます。ただし、オブジェクトのインスタンス メソッドを開始する前に、常にnull を確認することをお勧めします。

于 2012-09-04T10:09:14.493 に答える