想象我在VB中有以下内容:
function doSomething()
From ou In ctxt.Users.Where(Function(p) p.UserName = username)
...
end function
如何将过滤器作为参数发送(如下所示)?
function doSomething(filter as whatTypeHereAndHowToInstantiateInCallingFunction)
From ou In ctxt.Users.Where(filter)
...
end function
感谢
答案 0 :(得分:2)
你可以从这样的事情开始:
Sub doSomething(Of T)(filter as System.Func(Of T, Boolean))
From ou In ctxt.Users.Where(filter)
...
End Sub
我不知道ctxt.Users的类型,但你可以用你的类型删除泛型T并将一个Func(YOURTYPE,Boolean)传递给doSomething。
然后你可以像这样使用它:
doSomething(Function(p) p.UserName = username)
答案 1 :(得分:1)
您的过滤器参数类型应为Expression< Func< bool>>我相信。然后,您可以将lambda表达式传递给它,您可以将其用作变量。
如果你正在使用LINQ-to-objects,你可能只想使用Func< bool>作为参数类型。
答案 2 :(得分:1)
您也可以使用谓词,例如
<TestMethod()> _
Public Sub test1()
Assert.AreEqual("a", WhereExample(Function(x) x = "a"))
End Sub
Public Function WhereExample(ByVal filter As Predicate(Of String)) As String
Dim str = New String() {"a", "b", "c"}
Return str.ToList.FindAll(filter).FirstOrDefault
End Function