How to iterate through each property of a custom vb.net object?

后端 未结 4 1807
囚心锁ツ
囚心锁ツ 2020-12-07 21:25

How can I go through each of the properties in my custom object? It is not a collection object, but is there something like this for non-collection objects?

         


        
相关标签:
4条回答
  • 2020-12-07 21:31

    You can use reflection... With Reflection you can examine every member of a class (a Type), proeprties, methods, contructors, fields, etc..

    using System.Reflection;
    
    Type type = job.GetType();
        foreach ( MemberInfo memInfo in type.GetMembers() )
           if (memInfo is PropertyInfo)
           {
                // Do Something
           }
    
    0 讨论(0)
  • 2020-12-07 21:35

    System.Reflection is "heavy-weight", i always implement a lighter method first..

    //C#

    if (item is IEnumerable) {
        foreach (object o in item as IEnumerable) {
                //do function
        }
    } else {
        foreach (System.Reflection.PropertyInfo p in obj.GetType().GetProperties())      {
            if (p.CanRead) {
                Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj,  null)); //possible function
            }
        }
    }
    

    'VB.Net

      If TypeOf item Is IEnumerable Then
    
        For Each o As Object In TryCast(item, IEnumerable)
                   'Do Function
         Next
      Else
        For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
             If p.CanRead Then
                   Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing))  'possible function
              End If
          Next
      End If
    
    0 讨论(0)
  • 2020-12-07 21:43

    You can use System.Reflection namespace to query information about the object type.

    For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
       If p.CanRead Then
           Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing))
       End If
    Next
    

    Please note that it is not suggested to use this approach instead of collections in your code. Reflection is a performance intensive thing and should be used wisely.

    0 讨论(0)
  • 2020-12-07 21:44

    By using reflection you can do that. In C# it looks like that;

    PropertyInfo[] propertyInfo = myobject.GetType().GetProperties();
    

    Added a VB.Net translation:

    Dim info() As PropertyInfo = myobject.GetType().GetProperties()
    
    0 讨论(0)
提交回复
热议问题