Поделиться через


Не удается скопировать значение <имяПараметра> параметра ByRef обратно в соответствующий аргумент, поскольку тип <имяТипа1> невозможно преобразовать к типу <имяТипа2>

Обновлен: Ноябрь 2007

Cannot copy the value of 'ByRef' parameter '<parametername>' back to the matching argument because type '<typename1>' cannot be converted to type '<typename2>'

Процедура объявлена с параметром типа, который не может быть преобразован обратно к типу аргумента вызова.

При определении класса или структуры можно определить один или несколько операторов преобразования для преобразования типа класса или структуры к другим типам. Можно также определить операторы обратного преобразования для преобразования других типов обратно к типу класса или структуры. При использовании типов класса или структуры в вызове процедуры Visual Basic может использовать эти операторы преобразования, чтобы преобразовать их к типу соответствующего параметра для этой процедуры.

При передаче аргумента ByRef, Visual Basic иногда копирует его значение в локальную переменную в процедуре вместо передачи ссылки. В таком случае, когда процедура возвращает результат, Visual Basic должен скопировать значение локальной переменной обратно в аргумент в коде вызова.

Если значение аргумента ByRef копируется в процедуру и аргумент и параметр имеют один и тот же тип, то преобразование не требуется. Но если типы различны, то Visual Basic должен выполнить преобразование в обоих направлениях. Если один из типов является типом соответствующего класса или структуры, то Visual Basic должен выполнить его преобразование к другому типу и обратное преобразование. Это означает, что необходимо определить операторы преобразования в обоих направлениях.

Идентификатор ошибки: BC33037

Для исправления данной ошибки выполните следующее.

  • Если это возможно используйте аргумент вызова того же типа, что и параметр процедуры, поэтому для Visual Basic нет необходимости выполнять какие-либо преобразования.

  • Если необходимо вызвать процедуру с аргументом, тип которого отличается от типа параметра, но нет необходимости возвращать результат в аргумент вызова, то определите параметр как ByVal, а не ByRef.

  • Если требуется возвращать значение в аргумент вызова, то определите оператор обратного преобразования таким образом, что Visual Basic сможет преобразовывать обратно к типу аргумента вызова.

См. также

Задачи

Практическое руководство. Определение оператора

Практическое руководство. Определение оператора преобразования

Основные понятия

Процедуры в Visual Basic

Параметры и аргументы процедуры

Передача аргументов по значению или по ссылке

Процедуры операторов

Ссылки

Оператор Operator