'<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 中的泛型程序

參考

型別清單