如何使用C#动态创建对象?

时间:2011-04-19 15:40:18

标签: c#

我正在尝试动态创建对象,但我不知道如何操作。我需要的是,我有一个该对象的类,对象属性存储在数据库中。然后我需要比较每个对象的属性以获得所需的结果。

所以我需要动态创建具有从数据库加载属性的对象。

9 个答案:

答案 0 :(得分:1)

我认为您不需要动态创建对象,只需创建一个与您的数据库模式匹配的静态对象和属性详细信息,然后您可以跨行或在对象的实例中比较属性的值。 / p>

答案 1 :(得分:1)

我一直在做类似的事情。有几件事:

  1. 包含System.Reflection命名空间
  2. 使用Activator
  3. 动态创建对象
  4. 使用myObjectType.GetProperties()方法
  5. 获取对象属性

    以下是使用上述方法的通用对象创建函数的示例:

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

答案 2 :(得分:0)

您在谈论Dictionary吗?

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

var prop2val=dict["property2"];

答案 3 :(得分:0)

答案 4 :(得分:0)

检查这个类,实时编译。但它的表现并不是很好。 http://msdn.microsoft.com/zh-cn/library/microsoft.csharp.csharpcodeprovider(VS.80).aspx

答案 5 :(得分: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});
}

答案 6 :(得分:0)

您可以使用反射来动态构建对象:

Reflection msdn reference

答案 7 :(得分:0)

我认为您希望从DB中检索行并直接将它们分配给对象,前提是该对象的属性等同于DB表的列。如果那就是你的意思那么我相信你不能:)

答案 8 :(得分:0)

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