zoukankan      html  css  js  c++  java
  • 用泛型和反射实现函数通用

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

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

  • 相关阅读:
    jQuery表单选择器 安静点
    设计模式建造者模式
    设计模式组合模式
    设计模式单例模式
    简述ASP.NET网站开发步骤
    设计模式适配器模式
    设计模式工厂方法模式
    设计模式桥接模式
    设计模式装饰模式
    设计模式抽象工厂方法模式
  • 原文地址:https://www.cnblogs.com/aaron-song/p/5503148.html
Copyright © 2011-2022 走看看