Hi,
I'm trying to read my compiled C# code.
this is my code:
using(OleDbCommand insertCommand = new OleDbCommand("...", connection))
{
// do super stuff
}
But!
We all know that a using gets translated to this:
{
OleDbCommand insertCommand = new OleDbCommand("...", connection)
try
{
//do super stuff
}
finally
{
if(insertCommand != null)
((IDisposable)insertCommand).Dispose();
}
}
(since OleDbCommand is a reference type).
But when I decompile my assembly (compiled with .NET 2.0) I get this 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:;
}
I'm talking about this line: if ((insertCommand == null) != null)
.
Let's say insertCommand IS null. Then the first part returns true. (true != null)
returns true
. So Then the disposing is still skipped? Weird, very weird.
If I paste this in Visual Studio, Resharper already warns me: Expression is always true...
Thanks!
-Kristof