Проверка типов в выражениях
Обновлено: 21.12.2024
Чтобы выполнить проверку или преобразование типов, можно использовать следующие операторы и выражения:
-
проверяет, совместим ли тип среды выполнения определенного выражения с указанным типом; явным образом преобразует выражение в указанный тип, если тип среды выполнения совместим с этим типом; выполняет явное преобразование; получает экземпляр System.Type указанного типа.
Оператор is
Выражение с оператором проверки типа is имеет следующий вид:
где E представляет выражение, возвращающее значение, а T содержит имя или параметр типа. E не может использоваться как анонимный метод или лямбда-выражение.
Оператор is возвращает true , если результат выражения имеет значение, отличное от NULL, и выполняется любое из следующих условий.
Тип результата выражения в среде выполнения — T .
Тип результата выражения в среде выполнения является производным от типа T , реализует интерфейс T или существует другое неявное преобразования ссылок из него в T .
Тип результата выражения в среде выполнения является типом, допускающим значение NULL, имеющим базовый тип T , а Nullable<T>.HasValue — true .
Существует упаковка-преобразование или распаковка-преобразование из типа результата выражения в среде выполнения в тип T .
Оператор is не учитывает заданные пользователем преобразования.
В следующем примере показано, что оператор is возвращает true , если тип результата выражения в среде выполнения является производным от указанного типа, то есть между этими типами существует преобразование ссылки:
В следующем примере показано, что оператор is учитывает упаковку-преобразование и распаковку-преобразование, но не учитывает числовые преобразования:
Тестирование типов с сопоставлением шаблонов
Дополнительные сведения о поддерживаемых шаблонах см. в разделе Шаблоны.
Оператор as
Оператор as явным образом преобразует результат выражения в указанный ссылочный или поддерживающий значения NULL тип. Если такое преобразование невозможно, оператор as возвращает значение null . В отличие от выражения приведения, оператор as никогда не создает исключение.
Выражение имеет такой формат:
где E представляет выражение, возвращающее значение, а T содержит имя или параметр типа. Результат такого выражения аналогичен результату этого:
за исключением того, что E вычисляется только один раз.
Оператор as рассматривает только преобразование ссылки, допускающие значение NULL преобразования, упаковку-преобразование и распаковку-преобразование. Нельзя использовать оператор as для определенного пользователем преобразования. Для этого используйте выражение приведения.
В следующем примере иллюстрируется использование оператора as .
Выражение приведения
Выражение приведения в формате (T)E выполняет явное преобразование значения выражения E в тип T . Если явного преобразования из типа E в тип T не существует, возникает ошибка времени компиляции. Во время выполнения явное преобразование может завершиться сбоем, и выражение приведения может вызвать исключение.
Приведенный ниже пример демонстрирует явное числовое преобразование и преобразование ссылки:
Другие данные об использовании ()
typeof - оператор
Оператор typeof получает экземпляр System.Type для указанного типа. Оператор typeof принимает в качестве аргумента имя типа или параметр типа, как показано в следующем примере:
Кроме того, оператор typeof можно использовать с несвязанными универсальными типами. В имени несвязанного универсального типа должно содержаться правильное количество запятых, то есть на одну меньше, чем число параметров этого типа. В следующем примере показано использование оператора typeof с несвязанным универсальным типом:
Оператор typeof не может принимать выражения в качестве аргументов. Чтобы получить экземпляр System.Type для типа среды выполнения результата выражения, используйте метод Object.GetType.
Тестирование типов с оператором typeof
Используйте оператор typeof , чтобы проверить совместимость типа среды выполнения результата выражения с указанным типом. В следующем примере показано различие между проверкой типов с помощью оператора typeof и оператора is:
Возможность перегрузки оператора
Операторы is , as и typeof перегрузить нельзя.
Определяемый пользователем тип нельзя использовать для перегрузки оператора () , но на его основе можно определить пользовательское преобразование типа и выполнить его с помощью выражения приведения. Дополнительные сведения см. в разделе Операторы пользовательского преобразования.
Читайте также: