Sto provando a leggere il mio codice C# compilato.C#, ottimizzazione strana
questo è il mio codice:
using(OleDbCommand insertCommand = new OleDbCommand("...", connection))
{
// do super stuff
}
Ma!
Sappiamo tutti che un utilizzo si traduce in questo:
{
OleDbCommand insertCommand = new OleDbCommand("...", connection)
try
{
//do super stuff
}
finally
{
if(insertCommand != null)
((IDisposable)insertCommand).Dispose();
}
}
(dal OleDbCommand è un tipo di riferimento).
Ma quando ho decompilare il mio assemblaggio (compilato con .NET 2.0) ottengo questo in ReSharper:
try
{
insertCommand = new OleDbCommand("", connection);
Label_0017:
try
{
//do super stuff
}
finally
{
Label_0111:
if ((insertCommand == null) != null)
{
goto Label_0122;
}
insertCommand.Dispose();
Label_0122:;
}
Sto parlando di questa linea: if ((insertCommand == null) != null)
.
Diciamo insertCommand IS null. Quindi la prima parte restituisce true. (true != null)
restituisce true
. Allora, l'eliminazione è ancora saltata? Strano, molto strano.
Se incollo questo in Visual Studio, ReSharper mi avverte già: L'espressione è sempre vero ...
Grazie!
-Kristof
Ho letto male la domanda così cancellata la mia risposta.Dopo aver letto correttamente la tua domanda, immagino che ci sia un bug in Resharper, ti suggerirei di provare qualche altro decompilatore e vedere quali risultati ottieni –
Quale strumento usi per decompilare? Forse dovresti provare con un altro –