2008-11-24 57 views
34

我該如何檢查自定義對象中的每個屬性?它不是一個集合對象,但是對於非集合對象是否有這樣的東西?如何遍歷自定義vb.net對象的每個屬性?

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

我的對象中有字符串,整數和布爾值屬性。

回答

59

通過使用反射,你可以做到這一點。在C#中看起來像這樣;

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

增加了VB.Net翻譯:

Dim info() As PropertyInfo = myobject.GetType().GetProperties() 
+0

哪裏每個條目內的價值? – Anders 2008-11-24 16:10:28

+0

有一個名爲propertyInfo.GetValue()的方法。 – 2008-11-25 10:43:06

1

您可以使用反射...與反思,你可以檢查一類的每一個成員(A型),proeprties,方法, contructors,田野等。

using System.Reflection; 

Type type = job.GetType(); 
    foreach (MemberInfo memInfo in type.GetMembers()) 
     if (memInfo is PropertyInfo) 
     { 
      // Do Something 
     } 
41

您可以使用的System.Reflection namespac e查詢有關對象類型的信息。

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 

請注意,建議您不要在代碼中使用此方法代替集合。反射是一個性能密集的事情,應該明智地使用。

5

的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