Читая код C #, я обнаружил довольно любопытный фрагмент:
if( whatever is IDisposable) {
(whatever as IDisposable).Dispose();
}
Я бы предпочел ожидать, что это будет сделано так:
if( whatever is IDisposable) { //check
((IDisposable)whatever).Dispose(); //cast - won't fail
}
или так:
IDisposable whateverDisposable = whatever as IDisposable;
if( whateverDisposable != null ) {
whateverDisposable.Dispose();
}
Я имею в виду , поскольку
похож на приведение, но возвращает null
в случае ошибки. Во втором фрагменте он не может завершиться неудачно (поскольку есть проверяется
раньше).
Какой смысл писать код, как в первом фрагменте, а не как во втором или третьем?