Trong hầu hết các ví dụ mà bạn tìm thấy trên web khi rõ ràng không sử dụng "sử dụng", mô hình trông giống như sau:IDisposable: là cần thiết để kiểm tra null vào cuối {}?
SqlConnection c = new SqlConnection(@"...");
try {
c.Open();
...
} finally {
if (c != null) //<== check for null
c.Dispose();
}
Nếu bạn sử dụng "sử dụng" và nhìn vào mã IL được tạo ra, bạn có thể thấy rằng nó tạo ra kiểm tra cho null
L_0024: ldloc.1
L_0025: ldnull
L_0026: ceq
L_0028: stloc.s CS$4$0000
L_002a: ldloc.s CS$4$0000
L_002c: brtrue.s L_0035
L_002e: ldloc.1
L_002f: callvirt instance void [mscorlib]System.IDisposable::Dispose()
L_0034: nop
L_0035: endfinally
Tôi hiểu tại sao IL được dịch để kiểm tra null (không biết bạn đã làm gì trong khối sử dụng), nhưng nếu bạn đang dùng thử .. cuối cùng và bạn có toàn quyền kiểm soát cách đối tượng IDisposable được sử dụng bên trong try..finally bl ock, bạn có thực sự cần phải kiểm tra null? nếu vậy, tại sao?
Có thể bảo vệ chống lại ngoại lệ tham chiếu Null trong trường hợp bạn đặt biến thành null trong khối sử dụng/thử không? – Gishu
đó là những gì tôi đang suy nghĩ – BlackTigerX
Câu hỏi hay .. làm cho tôi nhận ra pad doodle mã của tôi và tìm hiểu một cái gì đó mới. – Gishu