無法將 'ByRef' 參數 '<parametername>' 的值複製回相對應的引數,因為型別 '<typename1>' 無法轉換成型別 '<typename2>'

更新:2007 年 11 月

程序所宣告的參數型別,無法轉換回呼叫引數型別 (Argument Type)。

當您定義類別或結構時,可以定義一或多個將該類別或結構型別轉換為其他型別的轉換運算子。也可以定義反向的轉換運算子,將其他型別轉換回您的類別或結構型別。當您在程序呼叫中使用類別或結構型別時,Visual Basic 會使用這些轉換運算子,將引數的型別轉換為對應參數的型別。

如果您傳遞引數 ByRef,Visual Basic 有時會將引數值複製到程序中的區域變數,而不是傳遞參考。在這種狀況下,當程序傳回時,Visual Basic 必須接著將區域變數值複製回呼叫程式碼中的引數。

如果 ByRef 引數值已複製到程序,並且引數和參數屬於相同型別,便不需要轉換。但是,如果型別不同,則 Visual Basic 必須以兩個方向轉換。如果其中一個型別是您的類別或結構型別,Visual Basic 即需在它與另一個型別之間來回轉換。這表示您必須雙向定義轉換運算子。

錯誤 ID:BC33037

若要更正這個錯誤

  • 請盡可能使用與程序參數相同型別的呼叫引數,這樣 Visual Basic 便不需要執行任何轉換。

  • 如果您需要以不同於參數型別的引數型別呼叫程序,但不需要傳回值至此呼叫引數,則參數必須定義為 ByVal 而不是 ByRef。

  • 如果需要將值傳回給呼叫引數,請定義反向轉換運算子,讓 Visual Basic 可以轉換回呼叫引數型別。

請參閱

工作

HOW TO:定義運算子

HOW TO:定義轉換運算子

概念

Visual Basic 中的程序

程序參數和引數

以傳值和傳址方式傳遞引數

運算子程序

參考

Operator 陳述式