码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-17 21:09:51      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

  使用泛型和反射机制事项函数的通用,写下来,欢迎吐槽

  代码示例使用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

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

标签:

原文地址:http://www.cnblogs.com/aaron-song/p/5503148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!