如何在運行時動態創建和設置類的成員/屬性。在運行時動態創建和設置類的成員/屬性
編號: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"
}
}
而另一個問題的成員/屬性的代碼是我希望所有在上述初始化之後要設置的屬性,以便我可以像硬編碼的類對象那樣訪問它們。當前代碼僅銷售最後一個屬性,即數據集最後一行的值。
? – MikeSW
如果你這樣做,你以後如何訪問這些屬性?然後,您需要知道* KeyName *,但是如果您已經知道它,爲什麼不使用字典? –
你所有的值都是字符串? – Ben