Asp.net VB.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
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