みなさんこんにちは!ひろぽんです!
さて今回はClassのプロパティを動的に検索して型の種類を取得するプログラムを書いていきたいと思います!
めちゃくちゃ簡単なので、ぜひこの機会に覚えてください
さてそれでは本題!!
目次
Type.GetProperties関数でとれる
結論から言うとType型が持っているGetProperties関数を実行すればPropertyInfoの配列が返ってきて、PropertyInfoの中に型が入っています。
ではサンプルを書いていきましょう!
まずはサンプルクラスの用意
まずは下記のようなCarというサンプルクラスを用意します!
public class Car
{
public int ID { get; set; }
public string Name { get; set; }
public string Maker { get; set; }
public Car(int id, string name, string maker)
{
ID = id;
Name = name;
Maker = maker;
}
public Car()
{
}
}
Propertyの配列を取得する
で上記クラスのPropertyInfoの配列取得します。
PropertyInfoから型を取得する
下記のコードでCarクラスのプロパティの一覧を取得できます。
PropertyInfo[] props = typeof(Car).GetProperties();
で上記で取得したPropertyInfoの配列をぶん回して下記のコードで中身を見てみるとこんな感じ!
class Program
{
static void Main(string[] args)
{
PropertyInfo[] props = typeof(Car).GetProperties();
foreach (PropertyInfo prop in props)
{
Console.WriteLine($@"{prop.Name} : {prop.PropertyType}");
}
Console.ReadLine();
}
}
これをぶん回すと!
ちゃんとデータ型が取れているのが分かりますね!
動的に値を自由に操作することも可能!
実はこの方法を少し応用すれば、プロパティの値を動的に変更することもできます!
いつもなら下記のようなコードを書いてプロパティを変更してるとして。
var car = new Car(1,"インプレッサ","subaru");
car.Name = "フォレスター";
下記のようなコードでプロパティを変更できます!
var car = new Car(1, "インプレッサ", "subaru");
var carNameProp = props.First(item => item.Name == nameof(Car.Name));
carNameProp.SetValue(car,"フォレスター");
Console.WriteLine(car.Name);
ちゃんと変わっていますね!
この手法については下記の記事で詳しく書いていますので、是非ご覧ください!
詳しくは下記の記事を参照ください!
https://hiropon-progra.com/?p=789
今回の記事のサンプルコードをGithubで公開しています!
下記リポジトリで公開しているので、興味のある方はぜひ見てみてください!
コメント