繁体   English   中英

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

[英]Setting property in Immediate Window not setting?

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

可能导致这种情况的任何想法?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM