对“<genericproceduresignature>”的类型参数“<typeparametername1>”所做的类型参数推导失败

更新:2007 年 11 月

错误消息

对“<genericproceduresignature>”的类型参数“<typeparametername1>”所做的类型参数推理失败。从传递给参数“<parametername1>”的变量推理出的类型变量与从传递给参数“<parametername2>”的变量推理出的类型变量冲突。

未使用任何类型变量即调用了泛型过程,并且尝试进行的类型推理在类型参数之间产生了数据类型冲突。

通常,在调用某个泛型过程时,您将为该泛型过程定义的每个类型参数提供一个类型变量。如果未提供任何类型变量,编译器将尝试推理要传递给类型参数的类型。如果调用的上下文为类型参数提供了冲突的数据类型信息,则类型推理将失败。

以下代码可能会产生此错误。

Public Sub takeTwoValues(Of t)(ByVal x As t, ByVal y As t)
End Sub
Call takeTwoValues(4, 2.5)

由于第一个变量会让编译器为类型参数 t 推理出 Integer,而第二个变量会让编译器为同一类型参数推理出 Double,因此在传递给 t 的数据类型上存在冲突。

**错误 ID:**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 中的泛型过程

参考

类型列表