コードのプリプロセッサ ブロックの最後で変数が変更されているように見えるコードのチャンクがあります。
int initialKeyCount;
#if(DEBUG)
// int initialKeyCount = _root.CountAllKeys();
initialKeyCount = 20000;
#endif
currNode = currNode.EnsureDegreeKeysPresent(parent); //initialKeyCount = 19969 here
#if(DEBUG)
int currentKeyCount = _root.CountAllKeys();
Debug.Assert(initialKeyCount == currentKeyCount,
string.Format("EnsureDegreeNodesPresent changed the node count from {0} to {1}.", initialKeyCount, currentKeyCount));
#endif
おそらく20000を割り当てた後、デバッガーinitialKeyCount = 19969でこれを実行すると、これを少しいじって、initialKeyCountへの割り当てが最初のプリプロセッサブロック内で正しいことがわかりましたが、コードが最初のプリプロセッサを離れるとすぐにブロックすると、値が魔法のように 19969 に変わります。
この動作は、変数が最初のプリプロセッサ ブロックの内部または外部で宣言されているかどうかに関係なく同じです。値は、2 番目のプリプロセッサ ブロック内では 19969 のままです。
プリプロセッサ ブロックで行われた割り当ては、そのブロックの外側では定義されていませんか? それは間違っているようですが、ここで起こっていることのようです。