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
.
这是我的代码:
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
.