'<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)