2011-04-19 111 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类,您可以获取属性,获取属性名称,获取与属性关联的属性等。强大的技术。你应该能够做到你需要的上述信息,但如果不让我知道,我会添加更多的信息。