Mik*_*ike 6 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,两者都发生了.
可能导致这种情况的任何想法?
这是 Visual Studio 2015 RTM 中的一个已知错误。我们在 Visual Studio Update 1 中修复了该问题。本质上,从调试器到被调试进程的复杂值类型(如可空值)编组已被破坏。如果您不想安装 Update 1,可以通过转到“调试”->“选项”->“常规”并选中“使用旧版 C# 和 VB 表达式求值器”来解决此问题。
| 归档时间: | 
 | 
| 查看次数: | 1662 次 | 
| 最近记录: |