2011-04-19 114 views
2

我想動態創建對象,但我不知道如何去做。我需要的是,我有一個該對象的類,並且對象屬性存儲在數據庫中。然後我需要比較每個對象的屬性以獲得所需的結果。如何用C#動態創建對象?

所以我需要動態地創建對象與從數據庫加載的屬性。

+0

你有一個需要從數據庫填充的對象模型,或者你想有對象動態屬性? – Oded 2011-04-19 15:43:47

+0

是的。我有一個需要從DB填充的對象模型。就像我將創建5個對象,然後比較它們的屬性。 – 2011-04-19 15:45:23

+0

你能解釋一下你在做這件事時遇到了什麼問題嗎?什麼是確切的問題? – Oded 2011-04-19 15:46:39

回答

0

如果您想要從數據庫值實例化多個對象,可以這樣做。

//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}); 
} 
0

你在說什麼Dictionary

var dict=new Dictionary<string, string>(); 
dict.Add("property1", "val1"); 
dict.Add("property2", "val2"); 

var prop2val=dict["property2"]; 
1

我不認爲你需要動態創建對象,只需創建你的數據庫架構與性能的細節匹配一個靜態的,那麼你就可以跨行屬性的值進行比較,或內你的對象的實例。

+0

你能舉個例子嗎? – 2011-04-19 16:03:30

0

我認爲,要檢索從DB行,是直接分配給對象鑑於對象的屬性等同於DB表的列。如果你的意思是那麼我相信你不能:)

1

我一直在研究類似的東西。有幾件事情:

  1. 附上System.Reflection命名空間
  2. 創建一個對象動態使用Activator
  3. 使用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類,您可以獲取屬性,獲取屬性名稱,獲取與屬性關聯的屬性等。強大的技術。你應該能夠做到你需要的上述信息,但如果不讓我知道,我會添加更多的信息。