В большинстве примеров, которые вы найдете в Интернете, когда явным образом не использует ", шаблон выглядит примерно так:
SqlConnection c = new SqlConnection(@"...");
try {
c.Open();
...
} finally {
if (c != null) //<== check for null
c.Dispose();
}
Если вы используете "использование" и посмотрите на сгенерированный код IL, вы увидите, что он генерирует проверку для 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
Я понимаю, почему IL переводится для проверки на null (не знает, что вы делали внутри блока использования), но если вы используете try..finally, и у вас есть полный контроль над тем, как используется IDisposable-объект внутри блока try..finally вам действительно нужно проверить значение null? если да, то почему?