您的位置:首页 > 其它

用泛型和反射实现函数通用

2016-05-17 20:56 435 查看
使用泛型和反射机制事项函数的通用,写下来,欢迎吐槽

代码示例使用vb. net

Imports System.Reflection

Module Module1

Sub Main()

Dim lst1 As List(Of Person) = New List(Of Person)()

Dim lst2 As List(Of Person) = New List(Of Person)()

Dim lstT As List(Of Person) = New List(Of Person)()

For i As Integer = 1 To 10

Dim p As Person = New Person() With {.name = "A" + i.ToString, .age = i}

lst1.Add(p)

Next

For i As Integer = 5 To 20

Dim p As Person = New Person() With {.name = "A" + i.ToString, .age = i}

lst2.Add(p)

Next

lstT = New Common().MyFilter(Of Person)(lst1, lst2)

For Each itm As Person In lstT

Console.WriteLine(itm.name)

Next

Console.WriteLine("========================")

Dim lst3 As List(Of Animal) = New List(Of Animal)()

Dim lst4 As List(Of Animal) = New List(Of Animal)()

Dim lstM As List(Of Animal) = New List(Of Animal)()

For i As Integer = 1 To 10

Dim p As Animal = New Animal() With {.name = "B" + i.ToString, .ID = i}

lst3.Add(p)

Next

For i As Integer = 5 To 20

Dim p As Animal = New Animal() With {.name = "B" + i.ToString, .ID = i}

lst4.Add(p)

Next

lstM = New Common().MyFilter(Of Animal)(lst3, lst4)

For Each itm As Animal In lstM

Console.WriteLine(itm.name)

Next

Console.WriteLine("Over OK!")

Console.Read()

End Sub

End Module

Class Person

Public name As String

Public age As Integer

End Class

Class Animal

Public name As String

Public ID As String

End Class

Class Common

Public Function MyFilter(Of T)(ByVal lst1 As List(Of T), ByVal lst2 As List(Of T)) As List(Of T)

Dim lstT As List(Of T) = New List(Of T)()

lstT = lst1.Where(Function(x As T)

If lst2.Any(Function(u As T)

Return MyCompare(x, u)

End Function) Then

Return False

Else

Return True

End If

End Function).ToList()

Return lstT

End Function

Public Shared Function MyCompare(Of T)(ByVal t1 As T, ByVal t2 As T) As Boolean

Dim tmp1 As Type = t1.GetType()

Dim fields1 As FieldInfo() = tmp1.GetFields()

Dim tmp2 As Type = t2.GetType()

Dim fields2 As FieldInfo() = tmp2.GetFields()

For i As Integer = 0 To fields1.Count - 1

If Not (fields1(i).GetValue(t1)).Equals((fields2(i).GetValue(t2))) Then

Return False

End If

Next

Return True

End Function

End Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: