実行時にクラスのメンバー/プロパティを動的に作成および設定する方法を教えてください。実行時にクラスのメンバー/プロパティを動的に作成および設定する
Refが:http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.trygetmember(v=vs.110).aspx
は、私は私の要件に合うようにアイデアを変更しようとしましたが、それを行うことができません。
私は、データベースからKey
とValue
をフェッチう意味、実行時にクラスのメンバーを設定する必要が午前と私のクラスは、実行時前に定義されていないメンバーと完全に動的になりますが、それらのすべては、実行時にデータベースからフェッチされ。だからここ
は(MSDNから撮影)私のコードを行く:
public class DynamicObjDictionary : DynamicObject
{
// The inner dictionary.
Dictionary<string, object> dictionary = new Dictionary<string, object>();
public int Count
{
get{return dictionary.Count;}
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name.ToLower();
return dynDict.TryGetValue(name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
dynDict[binder.Name.ToLower()] = value;
return true;
}
}
}
クラス
dynamic DynObj = new DynamicObjDictionary();
DataSet ds = new DataSet();
ds = GetObjectProperties() // returns dataset having the properties as key and value pair;
if (ds.Tables["PropTable"].Rows.Count > 0)
{
foreach (DataRow dr in ds.Tables["PropTable"].Rows)
{
string KeyName = dr["KeyName"].ToString();
string ValueName= dr["ValueName"].ToString();
//---I want that in place of fldName the actual value from dr is added to the class - currently it returns DynObj.KeyName only.
DynObj.KeyName = ValueName;
// Means if current dr["KeyName"].ToString() has "Property1"
// And dr["ValueName"].ToString() has "PropertyValue"
// The DynObj should be like DynObj.Property1 = "PropertyValue"
}
}
そして、別の問題のメンバー/プロパティを初期化し、定義するコードは、私はすべて欲しいということです上記の初期化の後に設定されるプロパティをハードコードされたクラスオブジェクトのようにアクセスできるようにします。現在のコードは、最後のプロパティ、すなわちデータセットの最後の行の値のみを戻します。
なぜあなたはExpandoObjectを使用していませんか? – MikeSW
このようにすると、後でこれらのプロパティにどのようにアクセスしますか?あなたは* KeyName *を知る必要がありますが、もしあなたがすでにそれを知っているなら、辞書を使うのはなぜですか? –
あなたの値はすべて文字列ですか? – Ben