Какой смысл в использовании «is» с последующим «as» вместо «as» с последующей нулевой проверкой в ​​C #?

Читая код 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 в случае ошибки. Во втором фрагменте он не может завершиться неудачно (поскольку есть проверяется раньше).

Какой смысл писать код, как в первом фрагменте, а не как во втором или третьем?

22
задан Charles 22 August 2011 в 17:36
поделиться