The as operator can perform reference conversions between types in a type hierarchy, returning null if the conversion is not possible. But there are some cases when the compiler knows that no conversion is possible between the specified types, so it will generate an error at compile time.