2015-09-11 14 views
5

Ho un problema in un progetto in cui inserisco un punto di interruzione e inizio a lavorare con le proprietà di un oggetto e non riesco a impostare un valore su un valore nullable int. Posso impostarlo su null, ma se lo imposto su qualsiasi cosa poi controllo immediatamente il valore, restituisce 1.L'impostazione della proprietà nella finestra Immediata non è impostata?

Sto vedendo questo nella finestra immediata così come la finestra di ispezione che si apre quando si passa il mouse su un oggetto quando è stato messo in pausa in modalità di debug. Sembra anche che questo non influisca sul codice in esecuzione, proprio quando si rompe e si tenta di giocare con i valori.

sono stato in grado di riprodurre in un nuovo progetto di console:

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; } 
    } 

pasta che in un nuovo progetto di console, e mettere un punto di rottura al "myValue.NullableIntValue = 0;" linea. Quindi eseguilo.

Quando i colpi punto di interruzione, aprire la finestra Immediata e impostare il valore:

myValue.NullableIntValue = 123; 
123 

quindi controllare il valore:

?myValue.NullableIntValue 
1 

provare con qualcosa di diverso:

myValue.NullableIntValue = null 
null 
?myValue.NullableIntValue 
null 

Impostarlo su qualsiasi cosa diversa da null e sembra essere sempre 1.

È inoltre possibile passare con il mouse sulla linea di breakpoint "myValue" e lasciare che VS apra la finestra di ispezione in cui vengono visualizzati tutti i valori. Vai a NullableIntValue e impostalo su 100 (o qualsiasi altra cosa) e premi invio e lo cambia immediatamente a 1.

Questo sembra solo comportarsi in questo modo per una proprietà, cioè se cambio TestItem.NullableIntValue a una variabile invece di una proprietà funziona bene. E se assegno un valore a NullableIntValue nel codice e lo faccio funzionare sembra non prenderlo problema, solo durante un'interruzione nel debug.

Nota, anche provato in VS 2013 e prende l'incarico bene, quindi sembra limitato a VS 2015, e ho provato sia C# 6 e C# 5, succede su entrambi.

Qualche idea che cosa potrebbe causare questo?

+0

L'ho provato sul mio computer e non è stato possibile riprodurre il problema. Win 10, Visual Studio 2012, ha installato l'ultimo aggiornamento VS ieri sera. VS2015 è completamente patchato? – Christoph

+0

'partial class TestItem'? C'è un altro codice per questo da qualche altra parte? – theB

+3

Lo vedo, questo è un bug del debugger. Non è terribilmente sorprendente, ha avuto molti problemi con nullable in passato. Puoi utilizzare Strumenti> Opzioni> Debug> Generale> Utilizza la modalità di compatibilità gestita come soluzione alternativa, ma non è molto buona. È possibile segnalare il bug a connect.microsoft.com –

risposta

2

Questo è un bug noto in Visual Studio 2015 RTM. Lo abbiamo risolto in Visual Studio Update 1. Essenzialmente il marshalling di tipi di valori complessi (come nullables) dal debugger al processo di debuggee era rotto. Se non si desidera installare l'Update 1, è possibile aggirare il problema andando su Debug -> Opzioni -> Generale e selezionando "Usa gli analizzatori di versioni precedenti C# e VB".

+0

Grazie per l'aggiornamento @Patrick Nelson - MSFT! – Mike

Problemi correlati