Ich versuche, meinen kompilierten C# -Code zu lesen.C#, seltsame Optimierung
dies ist mein Code:
using(OleDbCommand insertCommand = new OleDbCommand("...", connection))
{
// do super stuff
}
Aber!
Wir alle wissen, dass eine Verwendung zu dieser übersetzt wird:
{
OleDbCommand insertCommand = new OleDbCommand("...", connection)
try
{
//do super stuff
}
finally
{
if(insertCommand != null)
((IDisposable)insertCommand).Dispose();
}
}
(seit OleDbCommand ist ein Referenz-Typ).
Aber wenn ich meine Montage decompile (kompiliert mit .NET 2.0) bekomme ich diese 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:;
}
ich über diese Linie rede: if ((insertCommand == null) != null)
.
Nehmen wir an, insertCommand ist null. Dann gibt der erste Teil wahr zurück. (true != null)
gibt true
zurück. Also dann wird die Entsorgung noch übersprungen? Seltsam, sehr komisch.
Wenn ich das in Visual Studio einfügen, ReSharper schon warnt mich: Ausdruck immer wahr ist ...
Dank!
-Kristof
Ich habe die Frage falsch gelesen, löschte meine Antwort. Nach dem Lesen Ihrer Frage richtig, würde ich vermuten, dass es einen Fehler in Resharper ist, würde ich vorschlagen, versuchen Sie einen anderen Decompiler und sehen, welche Ergebnisse Sie erhalten. –
Welches Werkzeug benutzen Sie um zu dekompilieren? Vielleicht sollten Sie einen anderen versuchen –