Чем отличается приведение типа (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 без исключения