Option Strict On does not allow narrowing in implicit type conversions between method '<methodname>' and delegate '<delegatename>'

With Option Strict on, you cannot have a narrowing conversion between the data type of a parameter in a delegate and the corresponding parameter of a function or Sub assigned to a variable of that delegate type. For example, function delegate Del has one parameter of type Integer, and functions Conversion1, Conversion2, and Conversion3 have one parameter of different numeric types.

Delegate Function Del(ByVal p As Integer) As String  
  
Function Conversion1(ByVal n As Integer) As String  
    Return "Valid"  
End Function  
  
Function Conversion2(ByVal n As Long) As String  
    Return "Valid"  
End Function  
  
Function Conversion3(ByVal n As Short) As String  
    Return "Not valid"  
End Function  

Because there is a widening conversion from Integer to Integer and to Long, the following assignments are valid.

' Valid.  
Dim funDel1 As Del = AddressOf Conversion1  
Dim funDel2 As Del = AddressOf Conversion2  

The conversion from Integer to Short is a narrowing conversion. Therefore, the following assignment is not valid.

' Not valid.  
Dim funDel3 As Del = AddressOf Conversion3  

Error ID: BC36663

To correct this error

  • Change the data type of the parameter in the delegate or the method so that the required widening relationship exists.

See also