3

私は次のコードを持っています:

public void DrawInput(string ChatCurrent){

        int uCursorTop;
        int uCursorLeft;
        uCursorLeft = Console.CursorLeft;
        uCursorTop = Console.CursorTop;
        Console.SetCursorPosition(0, uCursorTop);
        Console.Write("> "+ChatCurrent+" ");
        Console.SetCursorPosition(ChatCurrent.Length, uCursorTop);
    }

最終行を除いて、適切に動作します。最後の行はをスローしSystem.NullReferenceException: Object reference not set to an instance of an objectます。変なこと?具体的には、アクセスChatCurrent.Lengthが失敗の原因です。文字列の内容をエコーする直前の行は、問題なく機能します。

どうしたの?

4

2 に答える 2

9

文字列の連結はnull、値を空の文字列として扱います

文字列連結操作では、C#コンパイラはnull文字列を空の文字列と同じように扱いますが、元のnull文字列の値を変換しません。

http://msdn.microsoft.com/en-us/library/ms228504.aspx

nullただし、に直接渡す場合でもConsole.Write、例外はスローされず、何も書き込まれません。

http://msdn.microsoft.com/en-us/library/zcwe8sfx%28v=vs.80%29.aspx

値がnull参照(Visual BasicではNothing)の場合、何も書き込まれず、例外もスローされません。

于 2012-05-27T23:43:10.683 に答える
1

何が起こっていたかは次のとおりです。

上記のエラーが発生しました。長さの測定値をコメントアウトしたとき、テキストがエラーの原因になるかどうかを確認するために入力しました。そうでない場合は、元に戻して他の実験を試みました。

テスト中は一貫して何も入力していませんでした。つまり、変数は宣言されましたが初期化されていませんでした。私はこの問題を2時間修正しようとしています。

つまり、他の誰かがこの問題を抱えている場合:変数が初期化されていることを確認してください。この文脈でそれを宣言することと同じくらい重要です。

于 2012-05-28T00:00:32.243 に答える