Tôi đang cố đọc mã C# đã biên soạn của mình.C#, tối ưu hóa lạ
đây là mã của tôi:
using(OleDbCommand insertCommand = new OleDbCommand("...", connection))
{
// do super stuff
}
Nhưng!
Chúng ta đều biết rằng một sử dụng được dịch như sau:
{
OleDbCommand insertCommand = new OleDbCommand("...", connection)
try
{
//do super stuff
}
finally
{
if(insertCommand != null)
((IDisposable)insertCommand).Dispose();
}
}
(kể từ OleDbCommand là một loại tài liệu tham khảo).
Nhưng khi tôi biên soạn lại lắp ráp của tôi (biên soạn với .NET 2.0) tôi có được điều này trong 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:;
}
Tôi đang nói về dòng này: if ((insertCommand == null) != null)
.
Giả sử insertCommand IS null. Sau đó, phần đầu tiên trả về true. (true != null)
trả về true
. Vậy thì việc xử lý vẫn bị bỏ qua? Lạ thật, rất lạ.
Nếu tôi dán điều này trong Visual Studio, Resharper đã cảnh báo tôi: Biểu thức luôn đúng ...
Cảm ơn!
-Kristof
Tôi đã đọc câu hỏi của bạn đúng cách, tôi đoán rằng có lỗi trong Resharper, tôi khuyên bạn nên thử một số trình giải mã khác và xem kết quả bạn nhận được. –
Bạn sử dụng công cụ nào để dịch ngược? Có lẽ bạn nên thử một số khác –