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?
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
'partial class TestItem'? C'è un altro codice per questo da qualche altra parte? – theB
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 –