Не удалось выполнить выведение аргумента типа для параметра-типа <имяПараметраТипа1> из <подписьУниверсальнойПроцедуры>
Обновлен: Ноябрь 2007
Сообщение об ошибке
Выведение аргумента типа неудачно для параметра типа <ИмяПараметраТипа> от <ПодписьУниверсальнойПроцедуры>. Аргумент типа полученный из аргумента, переданного параметру <ИмяПараметра1>, конфликтует с аргументом типа, полученным из аргумента, переданного параметру <ИмяПараметра2>.
Type argument inference failed for type parameter '<typeparametername1>' of '<genericproceduresignature>'. Type argument inferred from the argument passed to parameter '<parametername1>' conflicts with the type argument inferred from the argument passed to parameter '<parametername2>'.
Универсальная процедура вызывается без аргументов типа, и попытка выведения типа привела к конфликту типов данных среди параметров типа.
Как правило, при вызове универсальной процедуры, указывается тип аргумента для каждого типа параметра, определяемого этой универсальной процедурой. Если никакие аргументы типа не передаются, компилятор пытается вывести типы, которые должны быть переданы параметрам типов. Если контекст вызова предоставляет конфликтующие сведения типов данных для параметра типа, выведение типа будет неудачным.
Следующий код может вызвать эту ошибку.
Public Sub takeTwoValues(Of t)(ByVal x As t, ByVal y As t)
End Sub
Call takeTwoValues(4, 2.5)
Поскольку первый аргумент указывает компилятору, что необходимо передать Integer для параметра типа t, в то время как второй аргумент указывает передать Double для того же параметра типа, имеется конфликт, состоящий в том, данные какого типа необходимо передавать t.
Идентификатор ошибки: BC32116
Исправление этой ошибки
Укажите аргументы типов для универсальной процедуры, чтобы компилятору не приходилось их выводить.
Call takeTwoValues(Of Double)(4, 2.5)
Обратите внимание, что если два обычных аргумента имеют различный тип данных, вызывающий код должен передать аргумент типа, который может вместить оба типа данных. В этом случае Integer расширяется до Double.
или
Переопределите универсальную процедуру, чтобы указать другой тип параметров для обычных параметров так, чтобы предотвратить конфликты получения типов.
Public Sub takeTwoValues(Of t1, t2)(ByVal x As t1, ByVal y As t2)
См. также
Основные понятия
Универсальные типы в Visual Basic
Универсальные процедуры в Visual Basic