1. ホーム
  2. .net

[解決済み] クラスのすべてのプロパティをループする方法は?

2022-04-23 21:55:09

質問

クラスがあります。

Public Class Foo
    Private _Name As String
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Private _Age As String
    Public Property Age() As String
        Get
            Return _Age
        End Get
        Set(ByVal value As String)
            _Age = value
        End Set
    End Property

    Private _ContactNumber As String
    Public Property ContactNumber() As String
        Get
            Return _ContactNumber
        End Get
        Set(ByVal value As String)
            _ContactNumber = value
        End Set
    End Property


End Class

上記のクラスのプロパティをループさせたい。 例えば

Public Sub DisplayAll(ByVal Someobject As Foo)
    For Each _Property As something In Someobject.Properties
        Console.WriteLine(_Property.Name & "=" & _Property.value)
    Next
End Sub

解決方法は?

Reflectionを使用します。

Type type = obj.GetType();
PropertyInfo[] properties = type.GetProperties();

foreach (PropertyInfo property in properties)
{
    Console.WriteLine("Name: " + property.Name + ", Value: " + property.GetValue(obj, null));
}

Excel の場合 - BindingFlags にアクセスするには、どのツール/リファレンス項目を追加しなければなりませんか。

編集:BindingFlags の値を type.GetProperties() :

BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
PropertyInfo[] properties = type.GetProperties(flags);

これにより、返されるプロパティは公開インスタンス・プロパティに制限されます (静的プロパティ、保護されたプロパティなどを除く)。

を指定する必要はありません。 BindingFlags.GetProperty を呼び出すときに使用します。 type.InvokeMember() を使用して、プロパティの値を取得します。