在立即窗口中设置属性不设置?

时间:2015-09-11 15:12:07

标签: c# visual-studio-2015

我在项目中遇到问题,我在其中设置了一个断点并开始使用对象的属性,并且我无法将值设置为可以为空的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 = 123;
123

然后检查值:

?myValue.NullableIntValue
1

尝试使用别的东西:

myValue.NullableIntValue = null
null
?myValue.NullableIntValue
null

将其设置为除null以外的任何值,并且似乎始终为1。

您也可以将鼠标悬停在断点线" myValue"然后让VS弹出检查窗口,在那里您可以看到所有值。转到NullableIntValue并将其设置为100(或任何内容)并按Enter键并立即将其更改为1.

这似乎只对某个属性表现出来,即如果我将TestItem.NullableIntValue更改为变量而不是属性,则它可以正常工作。如果我在代码中为NullableIntValue分配一个值并让它运行它似乎没有问题,只是在调试中断时没有。

注意,在VS 2013中也尝试了这个并且它的任务很好,因此它似乎仅限于VS 2015,我尝试了C#6和C#5,两者都发生了。

任何可能导致此问题的想法?

1 个答案:

答案 0 :(得分:3)

这是Visual Studio 2015 RTM中的已知错误。我们在Visual Studio Update 1中修复了它。基本上,从调试器到调试对象进程的编组复杂值类型(如nullables)已被破坏。如果您不想安装Update 1,可以通过调试 - >来解决它。选项 - >一般并检查“使用旧版C#和VB表达式评估程序”。