
プロパティの名称を取得する方法ってありますか?



GetTypeメソッドのGetPropertiesを利用することでコレクションとして取得することができます。
クラスのプロパティ名称文字列を全て取得
クラスのプロパティ名称文字列を全て取得するには、System.Reflection.PropertyInfo
クラスのGetPropertiesメソッドを利用します。
このメソッドを使うと、クラス内にあるプロパティの一覧をコレクションとして取得できます。
プロパティの名称文字列は、PropertyInfo
クラスのNameプロパティを使用することで取得できます。
以下は、GetPropertiesを使用してクラス内のプロパティをすべて取得し、それぞれのプロパティのNameプロパティを取得するサンプルです。
//オブジェクトにプロパティがあるとします。
var ent = new Entity();
//プロパティリストを取得
var lstProperty = ent.GetType().GetProperties();
//プロパティリストをループして同じプロパティ名がある場合は内容をコピーする
foreach (var property in lstProperty)
{
string strPropertyName = property.Name;
}
'オブジェクトにプロパティがあるとします。
Dim ent = New Entity()
'プロパティリストを取得
Dim lstProperty = ent.[GetType]().GetProperties()
'プロパティリストをループして同じプロパティ名がある場合は内容をコピーする
For Each [property] In lstProperty
Dim strPropertyName As String = [property].Name
Next
これで一括取得できました。
プロパティ名称を指定して取得
名称を指定してプロパティを取得したい場合は、GetPropertyメソッドを利用します。
GetPropertyメソッドは、指定された名称を持つプロパティを取得することができます。GetPropertyメソッドの引数には、プロパティ名称を文字列で指定します。取得したプロパティは、PropertyInfoクラスのインスタンスとして取得できます。
//オブジェクトにプロパティがあるとします。
var ent = new Entity();
//プロパティ名を指定してプロパティ情報を取得
var idProperty = ent.GetType().GetProperty("Id");
'オブジェクトにプロパティがあるとします。
Dim ent = New Entity()
'プロパティ名を指定してプロパティ情報を取得
Dim idProperty = ent.[GetType]().GetProperty("Id")
プロパティの値を取得するには、GetValueメソッドを利用します。GetValueメソッドの引数には、プロパティを持つオブジェクトのインスタンスを指定します。取得した値は、Object型で取得されますので、必要に応じてキャストする必要があります。
プロパティ名称をLINQでスマートに取得する
LINQを利用することでスマートなコードでプロパティ名称を取得することができます。
string[] propertyNames = typeof(MyClass).GetProperties().Select(p => p.Name).ToArray();
Dim propertyNames As String() = GetType(MyClass).GetProperties().Select(Function(p) p.Name).ToArray()
VB.NETのコードでは、GetType()
メソッドを使用して、MyClass
のType
オブジェクトを取得しています。GetProperties()
メソッドを使用して、このクラスのすべてのプロパティを表すPropertyInfo
オブジェクトの配列を取得します。そして、Select()
メソッドを使用して、PropertyInfo
オブジェクトのName
プロパティを選択し、配列に変換しています。
C#では、VB.NETと異なり、typeof
演算子を使用してType
オブジェクトを取得する必要があります。また、Select()
メソッド内のラムダ式をC#の書式に変更する必要があります。具体的には、VB.NETのFunction(p) p.Name
をC#のp => p.Name
に置き換えます。最後に、ToArray()
メソッドを使用して、IEnumerable<string>
をstring[]
に変換します。