web-dev-qa-db-ja.com

カスタムvb.netオブジェクトの各プロパティを反復処理する方法は?

カスタムオブジェクトの各プロパティをどのように確認できますか?これはコレクションオブジェクトではありませんが、非コレクションオブジェクトにはこのようなものがありますか?

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

私のオブジェクトには文字列、整数、ブールのプロパティがあります。

38
Anders

リフレクションを使用すると、それを行うことができます。 C#では、そのように見えます。

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

VB.Net翻訳を追加しました:

Dim info() As PropertyInfo = myobject.GetType().GetProperties()
61
Ali Ersöz

使用できます 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

コードでコレクションの代わりにこのアプローチを使用することは推奨されないことに注意してください。リフレクションはパフォーマンスを重視するものであり、賢明に使用する必要があります。

44
Mehrdad Afshari

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
7
NicoJuicy

リフレクションを使用できます...リフレクションを使用すると、クラス(タイプ)、プロパティ、メソッド、コンストラクター、フィールドなどのすべてのメンバーを調べることができます。

using System.Reflection;

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