我在项目中遇到问题,我在其中设置了一个断点并开始使用对象的属性,并且我无法将值设置为可以为空的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,两者都发生了。
任何可能导致此问题的想法?
答案 0 :(得分:3)
这是Visual Studio 2015 RTM中的已知错误。我们在Visual Studio Update 1中修复了它。基本上,从调试器到调试对象进程的编组复杂值类型(如nullables)已被破坏。如果您不想安装Update 1,可以通过调试 - >来解决它。选项 - >一般并检查“使用旧版C#和VB表达式评估程序”。