Проверка типов в выражениях

Обновлено: 21.11.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 перегрузить нельзя.

Определяемый пользователем тип нельзя использовать для перегрузки оператора () , но на его основе можно определить пользовательское преобразование типа и выполнить его с помощью выражения приведения. Дополнительные сведения см. в разделе Операторы пользовательского преобразования.

Читайте также: