System.Predicate 通用类 vb.net c#
2012-04-14 14:59
211 查看
Wrapper class for a Predicate(Of T) (C#版本)
public delegate bool PredicateWrapperDelegate<T, A>(T item, A argument);
public class PredicateWrapper<T, A>
{
private A _argument;
private PredicateWrapperDelegate<T, A> _wrapperDelegate;
public PredicateWrapper(A argument, PredicateWrapperDelegate<T, A> wrapperDelegate)
{
_argument = argument;
_wrapperDelegate = wrapperDelegate;
}
private bool InnerPredicate(T item)
{
return _wrapperDelegate(item, _argument);
}
public static implicit operator Predicate<T>(PredicateWrapper<T, A> wrapper)
{
return new Predicate<T>(wrapper.InnerPredicate);
}
}
Wrapper class for a Predicate(Of T) (vb.net版本)
Code:
Public Delegate Function PredicateWrapperDelegate(Of T, A) _
(ByVal item As T, ByVal argument As A) As Boolean
Public Class PredicateWrapper(Of T, A)
Private _argument As A
Private _wrapperDelegate As PredicateWrapperDelegate(Of T, A)
Public Sub New(ByVal argument As A, _
ByVal wrapperDelegate As PredicateWrapperDelegate(Of T, A))
_argument = argument
_wrapperDelegate = wrapperDelegate
End Sub
Private Function InnerPredicate(ByVal item As T) As Boolean
Return _wrapperDelegate(item, _argument)
End Function
Public Shared Widening Operator CType( _
ByVal wrapper As PredicateWrapper(Of T, A)) _
As Predicate(Of T)
Return New Predicate(Of T)(AddressOf wrapper.InnerPredicate)
End Operator
End Class
Generic user class I used for testing.
Code:
Public Class User
Public Sub New(ByVal firstName As String, ByVal lastName As String)
Me._firstName = firstName
Me._lastName = lastName
End Sub
Private _firstName As String
Public Property firstName() As String
Get
Return _firstName
End Get
Set(ByVal value As String)
_firstName = value
End Set
End Property
Private _lastName As String
Public Property lastName() As String
Get
Return _lastName
End Get
Set(ByVal value As String)
_lastName = value
End Set
End Property
End Class
Example usage where I pass a search parameter 'Jim' in for the first name.
Code:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim userList As New List(Of User) _
(New User() {New User("Jim", "Smith"), New User("John", "Doe"), New User("Bill", "Jones")})
Dim searchedUser As User = _
userList.Find(New PredicateWrapper(Of User, String)("Jim", AddressOf FirstNameMatch))
End Sub
Private Function FirstNameMatch(ByVal item As User, ByVal searchArg As String) As Boolean
Return item.firstName.Equals(searchArg)
End Function
End Class
public delegate bool PredicateWrapperDelegate<T, A>(T item, A argument);
public class PredicateWrapper<T, A>
{
private A _argument;
private PredicateWrapperDelegate<T, A> _wrapperDelegate;
public PredicateWrapper(A argument, PredicateWrapperDelegate<T, A> wrapperDelegate)
{
_argument = argument;
_wrapperDelegate = wrapperDelegate;
}
private bool InnerPredicate(T item)
{
return _wrapperDelegate(item, _argument);
}
public static implicit operator Predicate<T>(PredicateWrapper<T, A> wrapper)
{
return new Predicate<T>(wrapper.InnerPredicate);
}
}
Wrapper class for a Predicate(Of T) (vb.net版本)
Code:
Public Delegate Function PredicateWrapperDelegate(Of T, A) _
(ByVal item As T, ByVal argument As A) As Boolean
Public Class PredicateWrapper(Of T, A)
Private _argument As A
Private _wrapperDelegate As PredicateWrapperDelegate(Of T, A)
Public Sub New(ByVal argument As A, _
ByVal wrapperDelegate As PredicateWrapperDelegate(Of T, A))
_argument = argument
_wrapperDelegate = wrapperDelegate
End Sub
Private Function InnerPredicate(ByVal item As T) As Boolean
Return _wrapperDelegate(item, _argument)
End Function
Public Shared Widening Operator CType( _
ByVal wrapper As PredicateWrapper(Of T, A)) _
As Predicate(Of T)
Return New Predicate(Of T)(AddressOf wrapper.InnerPredicate)
End Operator
End Class
Generic user class I used for testing.
Code:
Public Class User
Public Sub New(ByVal firstName As String, ByVal lastName As String)
Me._firstName = firstName
Me._lastName = lastName
End Sub
Private _firstName As String
Public Property firstName() As String
Get
Return _firstName
End Get
Set(ByVal value As String)
_firstName = value
End Set
End Property
Private _lastName As String
Public Property lastName() As String
Get
Return _lastName
End Get
Set(ByVal value As String)
_lastName = value
End Set
End Property
End Class
Example usage where I pass a search parameter 'Jim' in for the first name.
Code:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim userList As New List(Of User) _
(New User() {New User("Jim", "Smith"), New User("John", "Doe"), New User("Bill", "Jones")})
Dim searchedUser As User = _
userList.Find(New PredicateWrapper(Of User, String)("Jim", AddressOf FirstNameMatch))
End Sub
Private Function FirstNameMatch(ByVal item As User, ByVal searchArg As String) As Boolean
Return item.firstName.Equals(searchArg)
End Function
End Class
相关文章推荐
- C#、VB.NET 使用System.Media.SoundPlayer播放音乐
- C#、VB.NET 使用System.Media.SoundPlayer播放音乐
- C#、VB.NET 使用System.Media.SoundPlayer播放音乐
- 关于VB.Net C#代码转换工具
- C# 转VB.NET
- 【转】VB.net C# 代码转换工具
- ASP.NET 2.0网站专案同时使C#与VB.NET之技巧(新书连载)
- C#(VB.NET)操作Windows自带的防火墙 之 添加/删除允许通过防火墙的例外程序
- VB.NET中图像处理的一些技巧以及其和C#图像处理的差距。
- C#与VB.NET代码互相转换在线工具
- VB.NET and C# 语法比较手册
- C# System.Net.NetworkInformation 命名空间学习之NetworkInterface 类获取IP,DNS,Gateway,Mask, MAC等网络相关信息
- LINQ Group by 多列值在C#与VB.Net上写法的区别
- NScript - A script host for C#/VB.NET/JScript.NET(NScript-.Net语言的脚步解释主机)
- ASP.NET 2.0网站专案同时使C#与VB.NET之技巧(新书连载)
- VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——AlbumView相册控件的使用方式
- VB.NET和C#之间的语法不同比较,已经更新到.NET4.0了
- C# to VB.net
- VB.net & C# comparison cheat sheet
- 继承之跨语言继承:inherit from C# to VB.net via CLR