Ответ 1
Используя рефлексию, вы можете это сделать. В С# это выглядит так:
PropertyInfo[] propertyInfo = myobject.GetType().GetProperties();
Добавлен перевод VB.Net:
Dim info() As PropertyInfo = myobject.GetType().GetProperties()
Как я могу пройти через каждое из свойств в моем пользовательском объекте? Это не объект коллекции, но есть ли что-то подобное для объектов, не связанных с коллекцией?
For Each entry as String in myObject
' Do stuff here...
Next
В моем объекте есть свойства string, integer и boolean.
Используя рефлексию, вы можете это сделать. В С# это выглядит так:
PropertyInfo[] propertyInfo = myobject.GetType().GetProperties();
Добавлен перевод VB.Net:
Dim info() As PropertyInfo = myobject.GetType().GetProperties()
Вы можете использовать пространство имен 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
Обратите внимание, что не рекомендуется использовать этот подход вместо коллекций в вашем коде. Отражение - вещь с высокой интенсивностью и должна быть разумно использована.
System.Reflection является "тяжеловесным", я всегда реализую более легкий метод.
//С#
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
Вы можете использовать отражение... С Reflection вы можете изучить каждый член класса (тип), proeprties, методы, конструкторы, поля и т.д.
using System.Reflection;
Type type = job.GetType();
foreach ( MemberInfo memInfo in type.GetMembers() )
if (memInfo is PropertyInfo)
{
// Do Something
}