Чем отличается приведение типа (cast) от оператора as в C#?

C# / .NET Основы языка Junior

Что это: Cast выполняет жёсткое приведение и при несовместимости типов выбрасывает InvalidCastException. Оператор as пытается привести к nullable-типу и возвращает null, если преобразование невозможно.

Почему важно: Выбор между cast и as определяет, будет ли код падать исключением или требовать проверки на null в ветвлении.

Под капотом: Оба используют IL isinst/castclass, но as генерирует проверку с null вместо throw. Cast с reference type на несовместимый тип приводит к InvalidCastException в runtime.

Типичная ошибка: Использовать as с value type напрямую (нужен as int?) или думать, что as меняет статический тип переменной без дополнительной проверки.

object obj = '42';

int viaCast = (int)obj;     // InvalidCastException
int? viaAs = obj as int?;   // null без исключения