C#/VB.NET プロパティ名の一覧を文字列で取得する方法

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

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")
CHECK

プロパティの値を取得するには、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()メソッドを使用して、MyClassTypeオブジェクトを取得しています。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[]に変換します。

リスキリングでキャリアアップしてみませんか?

リスキリング(学び直し)は、経済産業省が推奨しており、

今だけ、最大70%のキャッシュバックを受けることができます。

リスキリング 給付金が出るスクール紹介

最大70%の給付金が出るおすすめのプログラミングスクール!

国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!

興味のある方はすぐに確認しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次