首页 > 解决方案 > 即使签名不同,重载也会产生错误

问题描述

使用 vb.net 我有这个功能:

 Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer

我重载是因为我们在没有 AgentValue 的情况下用这个函数做同样的事情。

Public Overloads Function GetCountValues(ByVal CampaignIDValue As String, ByVal SearchTerm As String) As Integer

但是编译器坚持签名是相同的,即使它们不是。如果我将第二个 CampaignIDValue 更改为“作为对象”,那么在您尝试实际使用它之前就可以了。必须有一些我缺少的东西才能完成这项工作。如果您能提供帮助,我将不胜感激。

其他没有问题:(感谢您的耐心HardCode)。

Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer
Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer

如果将对象更改回字符串,这也会产生错误

Public Overloads Function GetCountValues(ByVal CampaignIDValue As Object,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer

全班。复制并粘贴到 vb.net 类中,我认为它会给你同样的错误:

Public Class clsExample

    ''' <summary>
    ''' CampaignID and Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And LTrim(RTrim(p.AGENT)).ToLower = LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.CAMPAIGNID, p.AGENT Into Group
                Select New With {.CAMPAIGNID = CAMPAIGNID, .Agent = AGENT, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' CampaignID Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As String, ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.CAMPAIGNID Into Group
                Select New With {.CAMPAIGNID = CAMPAIGNID, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function


    'Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
    '                                         ByVal SearchTerm As String) As Integer
    '    Dim x = From p In myTable.AsEnumerable
    '            Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
    '                LTrim(RTrim(CampaignIDValue)).ToLower _
    '                And p.TERMCD.Contains(SearchTerm)
    '            Group p By p.CAMPAIGNID Into Group
    '            Select New With {.CAMPAIGNID = CAMPAIGNID, .FunctionValue = Group.Count()}
    '    If x.Any = True Then
    '        Return x.ElementAt(0).FunctionValue
    '    Else
    '        Return 0
    '        ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
    '        'x = NewEntry
    '        ' Dim Copy = x.Append(NewEntry)
    '        'Return Copy

    '    End If
    'End Function

    ''' <summary>
    ''' Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.AGENT)).ToLower =
                    LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm)
                Group p By p.AGENT Into Group
                Select New With {.Agent = AgentValue, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate, CampaignID and Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                             ByVal AgentValue As String,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And LTrim(RTrim(p.AGENT)).ToLower = LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE, p.CAMPAIGNID, p.AGENT Into Group
                Select New With {.LCDATE = LCDATEValue, .CAMPAIGNID = CAMPAIGNID, .Agent = AGENT, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate and CampaignID Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal CampaignIDValue As Object,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.CAMPAIGNID)).ToLower =
                    LTrim(RTrim(CampaignIDValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE, p.CAMPAIGNID Into Group
                Select New With {.LCDATE = LCDATEValue, .CAMPAIGNID = CAMPAIGNID, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate and Agent Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                             ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where LTrim(RTrim(p.AGENT)).ToLower =
                    LTrim(RTrim(AgentValue)).ToLower _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE, p.AGENT Into Group
                Select New With {.LCDATE = LCDATEValue, .Agent = AgentValue, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function

    ''' <summary>
    ''' LCDate Driven Count Values
    ''' </summary>
    Public Overloads Function GetCountValues(ByVal LCDATEValue As Date,
                                             ByVal SearchTerm As String) As Integer
        Dim x = From p In myTable.AsEnumerable
                Where p.LCDATE =
                    LCDATEValue _
                    And p.TERMCD.Contains(SearchTerm) 'Order By p.AGENT
                Group p By p.LCDATE Into Group
                Select New With {.LCDATE = LCDATEValue, .FunctionValue = Group.Count()}
        If x.Any = True Then
            Return x.ElementAt(0).FunctionValue
        Else
            Return 0
            ' Dim NewEntry = New With {.CAMPAIGNID = CampaignIDValue, .Agent = AgentValue, .FunctionValue = 0}
            'x = NewEntry
            ' Dim Copy = x.Append(NewEntry)
            'Return Copy

        End If
    End Function
End Class

标签: .netvb.netoverloading

解决方案


参数变量的名称与签名无关!

我们需要能够调用这样的函数:

result = GetCountValues("string1", "string2")

如果您有两个与此匹配且仅在参数名称上有所不同的函数重载,则无法知道您的意思是哪一个。因此,对于问题中的类,这两种方法相互冲突:

Public Overloads Function GetCountValues(ByVal CampaignIDValue As String,
                                         ByVal SearchTerm As String) As Integer

Public Overloads Function GetCountValues(ByVal AgentValue As String,
                                         ByVal SearchTerm As String) As Integer

可能还有其他人。我不再看那个点了。


推荐阅读