2015-09-11 6 views
5

私は、ブレークポイントを設定してオブジェクトのプロパティで作業を開始するプロジェクトで問題が発生し、null可能なintに値を設定できません。私はnullに設定することができますが、何かに設定するとすぐに値をチェックすると、1が返されます。イミディエイトウィンドウのプロパティを設定していませんか?

これは、マウスオーバー時にポップアップするインスペクションウィンドウデバッグモードで一時停止したときのオブジェクト。また、値を壊して試してみると、実行中のコードには影響しません。

は、私は、新しいコンソールプロジェクトでそれを再現することができました:新しいコンソールプロジェクトに、とにブレークポイントを置く

class Program 
    { 
    static void Main(string[] args) 
    { 
     var myValue = new TestItem() 
     { 
     NullableIntValue = null, 
     StringValue = "My test value" 
     }; 

     Console.WriteLine(string.Format("{0} is set to {1}", myValue.StringValue, myValue.NullableIntValue.HasValue ? myValue.NullableIntValue.Value.ToString() : "nothing")); 

     myValue.NullableIntValue = 0; 

     Console.WriteLine(string.Format("{0} is set to {1}", myValue.StringValue, myValue.NullableIntValue.Value)); 

     Console.ReadLine(); 

    } 
    } 

    public class TestItem 
    { 
    public int? NullableIntValue { get; set; } 
    public string StringValue { get; set; } 
    } 

貼り付け「myValue.NullableIntValue = 0;」ライン。その後、それを実行します。

ブレークポイントのヒットは、イミディエイトウィンドウを開いて、値を設定した場合:

myValue.NullableIntValue = null 
null 
?myValue.NullableIntValue 
null 

?myValue.NullableIntValue 
1 

は何か他のものを試してみよう:

myValue.NullableIntValue = 123; 
123 

は、その後値をチェックnull以外の値に設定すると、常に1と思われます。

また、ブレークポイントの行「myValue」にマウスを合わせると、すべての値が表示されている検査ウィンドウが開きます。 NullableIntValueに移動して100(またはそれ以上)に設定してEnterキーを押すと、すぐに1に変更されます。

これはプロパティに対してこのように動作するようです。つまり、TestItem.NullableIntValueをプロパティは正常に動作します。私はコード内のNullableIntValueに値を代入し、それを実行させても、デバッグ中のブレーク中であっても、それは問題ありません。

VS 2013でこれも試してみましたが、VS 2015に限られているようですので、C#6とC#5の両方を試しました。

何が原因なのですか?

+0

私のマシンで試したところ、問題を再現できませんでした。 Win 10、Visual Studio 2012は、昨夜の最新のVSアップデートをインストールしました。 VS2015は完全にパッチされていますか? – Christoph

+0

'partial class TestItem'?別の場所にコードがありますか? – theB

+3

私はそれを見る、これはデバッガのバグです。ひどく驚くことではありませんが、それは過去にヌル化可能であることで多くの問題を抱えていました。回避策として、[ツール]> [オプション]> [デバッグ]> [一般]> [管理された互換モードを使用]を使用できますが、あまり良い方法ではありません。バグはconnect.microsoft.com –

答えて

2

これはVisual Studio 2015 RTMの既知のバグです。私たちはVisual Studio Update 1でそれを修正しました。デバッガからデバッグプロセスへの複雑な値のタイプ(nullablesなど)を基本的にマーシャリングしていました。 Update 1をインストールしない場合は、[デバッグ] - > [オプション] - > [一般]に移動し、[従来のC#とVB式の評価ツールを使用する]をチェックして対処できます。

+0

更新ありがとう@Patrick Nelson - MSFT! – Mike

関連する問題