我想動態創建對象,但我不知道如何去做。我需要的是,我有一個該對象的類,並且對象屬性存儲在數據庫中。然後我需要比較每個對象的屬性以獲得所需的結果。如何用C#動態創建對象?
所以我需要動態地創建對象與從數據庫加載的屬性。
我想動態創建對象,但我不知道如何去做。我需要的是,我有一個該對象的類,並且對象屬性存儲在數據庫中。然後我需要比較每個對象的屬性以獲得所需的結果。如何用C#動態創建對象?
所以我需要動態地創建對象與從數據庫加載的屬性。
如果您想要從數據庫值實例化多個對象,可以這樣做。
//database code goes here, results go in results
List<ClassName> l = new List<ClassName>()
foreach(Row r in results){
l.Add(new ClassName(){ClassProperty1 = r.Property1,ClassProperty2 = r.Property2});
}
你在說什麼Dictionary
?
var dict=new Dictionary<string, string>();
dict.Add("property1", "val1");
dict.Add("property2", "val2");
var prop2val=dict["property2"];
我不認爲你需要動態創建對象,只需創建你的數據庫架構與性能的細節匹配一個靜態的,那麼你就可以跨行屬性的值進行比較,或內你的對象的實例。
你能舉個例子嗎? – 2011-04-19 16:03:30
你可以使用反射來動態建立的對象:
我認爲,要檢索從DB行,是直接分配給對象鑑於對象的屬性等同於DB表的列。如果你的意思是那麼我相信你不能:)
我一直在研究類似的東西。有幾件事情:
System.Reflection
命名空間Activator
myObjectType.GetProperties()
方法這裏獲取對象的屬性是一個通用的對象創建的實例功能使用以上方法:
using System.Reflection;
public static Item CreateItem<Item>(object[] constructorArgs, object[] propertyVals)
{
//Get the object type
Type t = typeof(Item);
//Create object instance
Item myItem = (Item)Activator.CreateInstance(t, constructorArgs);
//Get and fill the properties
PropertyInfo[] pInfoArr = t.GetProperties();
for (int i = 0; i < pInfoArr.Length; ++i)
pInfo.SetValue(myItem, propertyVals[i], null); //The last argument is for indexed properties
return myItem;
}
當然,上面的例子假設屬性值數組中的值是正確排列的,但不一定是這樣,但你明白了。
通過PropertyInfo類,您可以獲取屬性,獲取屬性名稱,獲取與屬性關聯的屬性等。強大的技術。你應該能夠做到你需要的上述信息,但如果不讓我知道,我會添加更多的信息。
Rob Conery做了一個小項目叫做Massive這幾乎完成了你要完成的任務。它基本上是一個小型的ORM,在400行Dynamic C#4.0代碼中。
Rob一直在用SubSonic做這種事情很長一段時間,所以你可能會發現他的Massive方法很有趣。
http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive
某些代碼在這裏解釋,舉例:
http://blog.wekeroad.com/microsoft/the-super-dynamic-massive-freakshow
你有一個需要從數據庫填充的對象模型,或者你想有對象動態屬性? – Oded 2011-04-19 15:43:47
是的。我有一個需要從DB填充的對象模型。就像我將創建5個對象,然後比較它們的屬性。 – 2011-04-19 15:45:23
你能解釋一下你在做這件事時遇到了什麼問題嗎?什麼是確切的問題? – Oded 2011-04-19 15:46:39