こんにちは。
本日はC#メモです。
概要
DBやファイルから値を取得し、
特定のプロパティに設定をする際、
数が少ない場合はいいですが
数が多くなると少し厄介になります(ミスも増えるし。。。)
リフレクションを使用することで、
プロパティ名でアクセスが可能になります。
本サンプルでは、Dictionaryで取得したデータを
リフレクションを使用して、プロパティに設定・取得を行います。
今回プロパティを設定・取得するクラスは以下とします。
private class ItemInfo { public string Id { get; set; } public string Name { get; set; } }
プロパティの設定
以下値を設定するコードです。
dic
のkeyがプロパティ名に該当します。
public void Execute() { var dic = new Dictionary<string, string> { { "Id", "1" }, { "Name", "Bob" } }; var itemInfo = new ItemInfo(); foreach (var key in dic.Keys) { var property = typeof(ItemInfo).GetProperty(key); property.SetValue(itemInfo, dic[key]); } Console.WriteLine($"Id = {itemInfo.Id}, Name = {itemInfo.Name}"); }
GetProperty
、引数に指定したプロパティ名に該当する
プロパティのSystem.Reflection.PropertyInfoを取得します。
typeof(ItemInfo).GetProperty(key);
SetValue
で指定したオブジェクトのプロパティを設定します。
第一引数に設定するオブジェクト、第二引数に設定する値を指定します。
property.SetValue(itemInfo, dic[key]);
実行結果は以下です。
Id = 1, Name = Bob
プロパティを取得する
itemInfo = new ItemInfo { Id = "2", Name = "Kevin" }; var properties = typeof(ItemInfo).GetProperties(); foreach (var p in properties) { var name = p.Name; var value = p.GetValue(itemInfo); Console.WriteLine($"Property Name = {name}, Value = {value}"); }
GetProperties
を使用して指定したオブジェクトのプロパティを取得します。
GetProperties
はPropertyInfo[]
を返します。
typeof(ItemInfo).GetProperties()
上記で取得したPropertyInfo
を使用してプロパティ名と値を取得します。
var name = p.Name; var value = p.GetValue(itemInfo);
実行結果は以下です。
Property Name = Id, Value = 2 Property Name = Name, Value = Kevin
以上です。