用泛型和反射实现函数通用
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
代码示例使用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
相关文章推荐
- bzoj 1483: [HNOI2009]梦幻布丁
- Linux中解析json---jq
- C# 转换时间戳
- 3.4 计算几何
- android开发调试工具一览
- LeetCode- 238. Product of Array Except Self
- BZOJ
- Android Studio生成aar包并在其他工程引用aar包
- REST、RESTFUL的理解以及SpringMVC实现Restful编程
- 运输层的TCP协议
- PPT如何带走常用的字体
- 【使用Postman测试web接口】Postman的安装与入门
- Easy Digital Downloads插件拓展 Frontend Submissions 前端提交多用户插件[更新至 v2.4.1]
- 蓝桥杯练习系统—基础练习 完美的代价
- 一般项目开发流程
- Quartz2d 画图
- 父窗口打开子窗口,子窗口关闭后自动刷新父窗口
- 设计模式之原型模式
- 并发编程学习总结(四) :java 显式锁ReentrantLock使用详解之lock()\unlock() 加锁与释放锁
- Dhroid框架六大组件之Ioc容器【上】