デバッグ中、Visual Studio は現在のコンテキストですべての変数を追跡します。
次のコードを検討してください。
void SomeMethod1()
{
int j = 0;
}
void SomeMethod2()
{
int i = 0;
}//Breakpoint on this line.
プログラムが中断するとき、現在のコンテキストはSomeMethod2
です。この時点で、開発者は の値がどうなるかを確認できませんj
。これはint j
、現在のコンテキストでは変数ではないためです。
OPの説明された動作の背後にある実際の理由:
Visual Studioは、変数の名前が現在のコンテキストに存在するかどうかを確認し、変数自体が現在のコンテキストに存在するかどうかは確認しません。
したがって、変数の名前j
をi
inSomeMethod1
に変更すると、その「値」が突然表示されます。i
inSomeMethod2
が文字列であるとしたら、どのように奇妙になるか想像してみてください。
これをいつ知る必要がありますか?
現在のコンテキストが何であるかがすぐに明確でないコードがあるときはいつでも。次のコードでこの問題が発生しました。
private double CalculateFast(double d)
{
//Depending on the size of d, either [Method 1] or [Method 2] is faster.
//Run them both and use the answer of the first method to finish.
Tasks.Task.Factory.StartNew(() = >
{
//Method 1
}
//Method 2
return answer;
}
私はデバッグMethod 2
していましたが、変数も表示できると思いMethod 1
ました。しかしMethod 1
、独自のコンテキストがあるため、そうではありませんでした。