Asp.net VB.NET中扩展方法的错误

Asp.net VB.NET中扩展方法的错误,asp.net,vb.net,extension-methods,Asp.net,Vb.net,Extension Methods,我正在尝试在VB.NET中编写扩展方法 Imports System.Runtime.CompilerServices Module ExtensionMethods <Extension()> _ Public Function FindByText(ByVal collection As ListItemCollection, text As String, comparisonType As StringComparison) As ListItem

我正在尝试在VB.NET中编写扩展方法

Imports System.Runtime.CompilerServices

Module ExtensionMethods

    <Extension()> _
    Public Function FindByText(ByVal collection As ListItemCollection, text As String, comparisonType As StringComparison) As ListItem
        Dim result As ListItem = collection.OfType(Of ListItem)().FirstOrDefault(Function(s) s.Text.Equals(text, comparisonType))
        Return result
    End Function

    <Extension()> _
    Public Function FindByValue(ByVal collection As ListItemCollection, text As String, comparisonType As StringComparison) As ListItem
        Dim result As ListItem = collection.OfType(Of ListItem)().FirstOrDefault(Function(s) s.Value.Equals(text, comparisonType))
        Return result
    End Function

End Module
附言:我移植到VB

  • 您的代码正常工作,因此必须在其他地方引发异常(什么是
    调查
    ?)
  • 使用
    collection.Cast(属于ListItem)(
    而不是
    collection.OfType(属于ListItem)(
    ),因为列表中的所有对象本质上都属于
    ListItem
    类型
  • 测试

    <asp:DropDownList ID="DdlFoo" runat="server" AutoPostBack="true" OnSelectedIndexChanged="FooSelected" >
        <asp:ListItem Text="Foo1" Value="1"></asp:ListItem>
        <asp:ListItem Text="Foo2" Value="2"></asp:ListItem>
        <asp:ListItem Text="Foo3" Value="3"></asp:ListItem>
    </asp:DropDownList>
    

    使用
    collection.Cast(属于ListItem)(
    而不是
    collection.OfType(属于ListItem)(
    ),因为a中的所有对象本质上都属于
    ListItem
    类型。除了taht之外,错误必须在其他地方,向我们展示使用这些扩展的代码。FindByText声明的参数与调用它的参数不同?我认为问题在于,我希望第一个参数是需要扩展的项,第二个参数是函数的逻辑流
    <asp:DropDownList ID="DdlFoo" runat="server" AutoPostBack="true" OnSelectedIndexChanged="FooSelected" >
        <asp:ListItem Text="Foo1" Value="1"></asp:ListItem>
        <asp:ListItem Text="Foo2" Value="2"></asp:ListItem>
        <asp:ListItem Text="Foo3" Value="3"></asp:ListItem>
    </asp:DropDownList>
    
    Dim foo2 = DirectCast(sender, DropDownList).Items.FindByText("FOO2", StringComparison.CurrentCultureIgnoreCase)
    If Not foo2 Is Nothing Then
        ' your overloaded extension is called successfully
    End If