BC36913:无法推断常见类型

BC36913: Cannot infer a common type

这是我的代码:

    Private Const CFE_LINK As UInt32 = &H20

    Public Sub SetSelectionLink(ByVal link As Boolean)
        SetSelectionStyle(CFM_LINK, If(link, CFE_LINK, 0))
    End Sub
    Public Function GetSelectionLink() As Integer
        Return GetSelectionStyle(CFM_LINK, CFE_LINK)
    End Function

    Private Sub SetSelectionStyle(ByVal mask As UInt32, ByVal effect As UInt32)
        Dim cf As CHARFORMAT2_STRUCT = New CHARFORMAT2_STRUCT()
        cf.cbSize = CUInt(Marshal.SizeOf(cf))
        cf.dwMask = mask
        cf.dwEffects = effect
        Dim wpar As IntPtr = New IntPtr(SCF_SELECTION)
        Dim lpar As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cf))
        Marshal.StructureToPtr(cf, lpar, False)
        Dim res As IntPtr = SendMessage(Handle, EM_SETCHARFORMAT, wpar, lpar)
        Marshal.FreeCoTaskMem(lpar)
    End Sub

我在该行遇到错误(无法推断二进制 'If' 运算符的第一个和第二个操作数的通用类型):

SetSelectionStyle(CFM_LINK, If(link, CFE_LINK, 0))

好的...在 MSDN Documentation 之后,我试过了,编译器似乎没问题。

SetSelectionStyle(CFM_LINK, If(link, CFE_LINK, CUint(0)))

常量 0 的类型是 Integer。我认为错误是因为编译器无法判断它应该使用 Integer 还是 UInt32 作为结果类型;它们都是整数类型,位宽相同,唯一的区别是上下限。

如您所述,您可以使用显式转换使 If 的两个操作数具有相同的类型。

您还可以使用适当的类型后缀使常量 0 具有正确的类型。在这种情况下,以下应该有效:

SetSelectionStyle(CFM_LINK, If(link, CFE_LINK, 0UI))

UI 后缀告诉编译器将 0 视为 UInteger(与 UInt32 类型相同)而不是 Integer.