我在一個項目中有一個問題,我放置了一個斷點並開始使用對象的屬性,並且我無法將值設置爲可爲空的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 = null
null
?myValue.NullableIntValue
null
:
?myValue.NullableIntValue
1
別的東西試試吧將它設置爲除null之外的任何東西,似乎總是1.
您也可以將鼠標懸停在斷點行「myValue」上並讓VS彈出打開檢查窗口,您可以在其中查看所有值。轉到NullableIntValue並將其設置爲100(或任何其他值),然後按Enter鍵,並立即將其更改爲1.
這似乎只對某個屬性表現爲這種方式,即如果將TestItem.NullableIntValue更改爲變量而不是它的工作正常的財產。如果我給代碼中的NullableIntValue賦值並讓它運行,它似乎不會造成任何問題,只是在調試過程中不中斷。
請注意,在VS 2013中也試過這個,它的任務很好,所以它似乎侷限於VS 2015,並且我嘗試了C#6和C#5,都發生在兩者上。
任何想法可能導致這種情況?
我在我的機器上試過了,無法重現您的問題。 Win 10,Visual Studio 2012,昨晚安裝了最新的VS更新。您的VS2015是否已完全修補? – Christoph
'部分類TestItem'?其他地方是否有其他代碼? – theB
我看到它,這是一個調試器錯誤。這並不令人驚訝,過去它有可空的麻煩。您可以使用工具>選項>調試>常規>使用託管兼容模式作爲解決方法,但它不是一個很好的解決方案。你可以在connect.microsoft.com上報告錯誤 –