martedì 20 marzo 2012

Tipi Anonimi e Reflection in VB

  1. Module Module1
  2.  
  3.     Public Class User
  4.         Public ID_User As Integer
  5.         Public ID_Role As Integer
  6.         Public Name As String
  7.         Public Surname As String
  8.     End Class
  9.     Public Class Role
  10.         Public ID_Role As Integer
  11.         Public Name As String
  12.         Public Description As String
  13.     End Class
  14.  
  15.     Sub Main()
  16.         Dim rs As New List(Of Role) From {New Role() With {.ID_Role = 1, .Name = "Default", .Description = ""}, _
  17.                                           New Role() With {.ID_Role = 2, .Name = "J.Dev", .Description = ""}, _
  18.                                           New Role() With {.ID_Role = 3, .Name = "S.Dev", .Description = ""}}
  19.  
  20.         Dim us As New List(Of User) From {New User() With {.ID_User = 1, .ID_Role = 1, .Name = "Fabio", .Surname = "Arosio"}, _
  21.                                           New User() With {.ID_User = 1, .ID_Role = 2, .Name = "Claudio", .Surname = "Arosio"}, _
  22.                                           New User() With {.ID_User = 1, .ID_Role = 1, .Name = "Lorenzo", .Surname = "Arosio"}}
  23.  
  24.         Dim us_rs = (From p In us Where p.ID_Role = 1 _
  25.                     Select New With {.User_Name = p.Name, _
  26.                                      .User_Surname = p.Surname, _
  27.                                      .Role = (From q In rs Where q.ID_Role = p.ID_Role Select q.Name).FirstOrDefault _
  28.                                     }).ToList
  29.  
  30.         PrintAnonymousT(us_rs)
  31.         Console.ReadLine()
  32.     End Sub
  33.  
  34.     Public Sub PrintAnonymousT(AnonymousT As Object)
  35.  
  36.         'Controllo se ho a che fare con una collection
  37.         Dim t As Type = AnonymousT.GetType
  38.         Dim IfGenericCollection = (From p In t.GetProperties Where p.MemberType = Reflection.MemberTypes.Property And p.Name = "Count" Select p).FirstOrDefault
  39.  
  40.         'Se  una collection la scorro e stampo le propriet dei membri
  41.         If Not IsNothing(IfGenericCollection) Then
  42.             For Each p In AnonymousT
  43.                 Dim t1 As Type = p.GetType
  44.                 Dim props = From q In t1.GetProperties Where q.MemberType = Reflection.MemberTypes.Property Select q
  45.                 For Each q In props
  46.                     Console.WriteLine("Propriet {0} = {1}", q.Name, q.GetValue(p, Nothing))
  47.                 Next
  48.             Next
  49.         End If
  50.     End Sub
  51. End Module

Nessun commento: