2012-08-22 9 views
6

3進数を使用して10進数型を割り当てようとしています。それは私のために働いていない。私は狂ってる?10進3進数が機能しない

私のデバッグのスクリーンショットです。私は歩む前にすべての価値を見ることができます。 enter image description here

そして、ここにステップすると値があります。実行可能なオプション(1または2000など)の1つではありません。 enter image description here

小数点には奇妙な制限がありますか?私はそれを完全なif/else論理表現に分解するとうまく動作します。私が推測できるのは、最近.NET Framework 4.5をインストールしたことだけです。

UPDATE

私は解決策をきれいにし、私はコメントで推奨されているように、デバッグモードでコンパイルされたコードで実行されていたことを確認作りました。どちらも変わっていないようだ。

私のすべてのユニットテストがまだ通り過ぎていることに気付いたとき、私は好奇心をそそられ始めました。ちょっと待ってみたら、もう一度(つまりmemberItems.Addを踏んだ)価格は魔法のように値段が正しいことがわかりました。

.Netはイテレータブロックのyieldコマンドと同じような三項演算子の遅延解決を何らかの形で行いますか?私は今までそれに気づいたことはありませんが、他に何ができるのか分かりません。私はまだリリースモードでコンパイルされたコードを誤って実行している可能性があります。私は自分自身を三重にチェックした後に愚かな間違いをした。

+0

お返事ありがとうございます。私のスクリーンショットを見てください。自分の変数の値を見ることができるように、いくつかのウォッチウィンドウを固定しました。私は歩いても価格はまだ0です。 –

+5

「クリーン」を実行してから再構築してください。デバッグ情報が実際の実行可能ファイルのコードと同期しないことがあります。 – Servy

+10

リリースモードではなく、デバッグモードで実行していることを確認してください。また、固定した「価格」が間違って同じ名前のメンバー変数であることを確認します。 – dasblinkenlight

答えて

6

スクリーンショットのコードを診断することはできません。

完全にには、ウォッチ式が示すものに依存するとは限りません。最初に起こり得る障害モードは、最適化されたデバッグコードです。 のようなローカル変数は、ジッタオプティマイザによって最適化され、スタックではなくCPUレジスタに格納されます。ウォッチ式には、CPUのレジスタ値ではなくスタック位置の値が表示されます。 0が一般的な結果です。これに対して唯一の真の防衛策は、デバッグ構成によって構築されたデバッグコードだけです。

第2の失敗モードは、ウォッチ式の評価方法です。 CLRは、接続されたデバッガを検出すると専用スレッドを開始します。デバッガはこのスレッドを使用してウォッチ式を評価することができます。変数にスレッド親和性がある場合、これは間違っている可能性があります。一般的なケースは、[ThreadStatic]であるか、COMオブジェクトのプロパティである変数です。

+0

あなたが言及している可能性のある問題のどれもが私の場合には関連するとは思わないが、それは私が最初から知っていたよりもはるかに詳細である。また、あなたはこのすべてをどこから学んだのでしょうか?特定の記事や、あなたは何年も前にそれを拾いましたか? –

0

私は同じ問題を抱えていました。私も狂ったと思っていました。

IISの代わりに "Visual Studio Developer Server"を使用するように私のASP.NETアプリケーションを変更すると、それが修正されています。私がIISを使うのが好きなのは残念です。これは、プロダクションで起こっていることがより近いからです。