我在一个项目中遇到了问题,我设置了断点并开始使用对象的属性,但是我不能为可空 int 设置值。 我可以将其设置为 null,但是如果我将其设置为任何值然后立即检查该值,则返回 1。
我在调试模式下的立即窗口和悬停在对象上时弹出的检查窗口中看到了这一点。 这似乎不影响正在运行的代码,只影响您在暂停状态下尝试更改值时。
我能够在一个新的控制台项目中重现它:
将它粘贴到一个新的控制台项目中,并在“myValue.NullableIntValue = 0;”行处设置断点。然后运行它。
当断点触发时,打开即时窗口并设置值:
我在调试模式下的立即窗口和悬停在对象上时弹出的检查窗口中看到了这一点。 这似乎不影响正在运行的代码,只影响您在暂停状态下尝试更改值时。
我能够在一个新的控制台项目中重现它:
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,两者都发生了这种情况。
有什么想法是什么原因造成的吗?
partial class TestItem
?它是否还有其他地方的附加代码? - theB