Я предпочитаю приведение к as
в большинстве случаев, потому что обычно, если тип объекта неправильный, это указывает на ошибку. Ошибки должны вызывать исключения IMO - и InvalidCastException
точно в строке, которая выполняет приведение, намного яснее, чем NullReferenceException
намного позже в коде.
as
следует использовать, когда допустимо и разрешено передавать ссылку на объект того типа, который вам не нужен. Такая ситуация возникает, но не так часто, как в моем опыте.
Сравнение типов с использованием GetType()
, однако, очень редко является правильным решением - оно подходит, только если вы хотите проверить наличие точного типа, а не совместимого типа.
Я написал значительно более длинный ответ о дискуссии "Cast vs as" в другом месте.