Как перебрать каждое свойство пользовательского объекта vb.net? - PullRequest
38 голосов
/ 24 ноября 2008

Как я могу просмотреть каждое из свойств в моем пользовательском объекте? Это не объект коллекции, но есть ли что-то подобное для объектов, не относящихся к коллекции?

For Each entry as String in myObject
    ' Do stuff here...
Next

В моем объекте есть строковые, целочисленные и логические свойства.

Ответы [ 4 ]

61 голосов
/ 24 ноября 2008

Используя отражение, вы можете сделать это. В C # это выглядит так;

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

Добавлен перевод VB.Net:

Dim info() As PropertyInfo = myobject.GetType().GetProperties()
44 голосов
/ 24 ноября 2008

Вы можете использовать System.Reflection пространство имен для запроса информации о типе объекта.

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

Обратите внимание, что не рекомендуется использовать этот подход вместо коллекций в вашем коде. Отражение - вещь, требующая высокой производительности, и ее следует использовать с умом.

7 голосов
/ 17 ноября 2011

System.Reflection является "тяжелым", я всегда сначала применяю более легкий метод ..

// 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
1 голос
/ 24 ноября 2008

Вы можете использовать отражение ... С помощью Reflection вы можете исследовать каждого члена класса (тип), свойства, методы, конструкторы, поля и т. Д.

using System.Reflection;

Type type = job.GetType();
    foreach ( MemberInfo memInfo in type.GetMembers() )
       if (memInfo is PropertyInfo)
       {
            // Do Something
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...