0

これは十分に単純なはずです。問題を引き起こしている私の1行のコードは次のとおりです。

Point tp3 = new Point(0.0, 0.0);

それでも、その直後にブレークして、イミディエイト ウィンドウに「tp3」と入力すると、「'tp3' という名前は現在のコンテキストに存在しません」というメッセージが表示されます。一体何が起こっているのですか?このプロジェクトには、その 1 行よりもはるかに多くのコードがありますが、何が影響しているのかわかりません。私は文字通りこの行の直後に改行していて、tp3 はどこにも見当たりません。中断モードで tp3 にカーソルを合わせると、そこにも何も表示されません。

誰がこれを引き起こしているのか知っていますか? C# で Point を作成できないのはなぜですか??

編集:私は System.Windows.Point 構造体を使用していますが、デバッグを行うつもりだったときに、実際にリリース モードで実行していることを発見しました。tp3 がガベージ コレクションされていたため、もちろんこれが問題でした。迅速かつ正確な回答をありがとうございました!私は頭脳を引き抜こうとしていました。はい、私の頭脳。

編集#2:実際、Maupertuisが指摘したように(しゃれは完全に意図されています)、Pointは構造体であるため、ガベージ収集されません。代わりに、コンパイラは使用されていないため、最初にスペースを割り当てていません. ありがとうモーペルチュイ!

4

3 に答える 3

4

tp3 が使用されなくなった場合、範囲外として分類され、ガベージ コレクションの対象となります。

行の後に次のようなものを追加してみてくださいPoint tempP = tp3;。そうすれば、それを見ることができるはずです。

于 2011-03-09T21:26:17.950 に答える
2

プロジェクトのプロパティで [コードの最適化] チェックボックスがオンになっている場合、ガベージ コレクションができるように、最後の使用後にローカル オブジェクトが null に設定されます。また、変数がどこにも使用されていない場合、実際には割り当てられません。

デバッグまたはリリース モードに直接依存しませんが、デバッグ モードの既定値はオフ (最適化されていない) であり、リリースの既定値はオンになっています。

于 2011-03-09T21:33:37.420 に答える
1

浮動小数点引数を整数コンストラクターに渡しています。

代わりに PointF をインスタンス化してみてください。

PointF tp3 = new PointF(0.0f, 0.0f);

さらに良いことに、 PointF は構造体であるため、次を使用するだけです。

PointF tp3 = PointF.Empty;
于 2011-03-09T21:29:59.640 に答える