如何用c#动态创建对象

本文关键字:创建对象 动态 何用 | 更新日期: 2023-09-27 17:50:38

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

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

如何用c#动态创建对象

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

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

如果你有很多对象你想从数据库值实例化它可以这样做。

//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"];

也许Activator就是你想要的?

http://msdn.microsoft.com/en-us/library/system.activator.aspx

我不认为你需要动态地创建对象,只是静态地创建一个匹配你的db模式的属性细节,然后你可以跨行比较属性的值,或者在你的对象的实例

勾选此类,实时编译。但是它的性能不是很好。http://msdn.microsoft.com/zh-cn/library/microsoft.csharp.csharpcodeprovider (VS.80) . aspx

你可以使用反射来动态地构建你的对象:

msdn参考

我认为您想要从DB中检索行并直接将其分配给给定对象的属性相当于DB表的列。如果你是这个意思,那么我相信你不能。

Rob Conery做了一个名为Massive的小项目(现在由FransBouma维护),它几乎可以完成您想要完成的任务。它本质上是一个小的ORM,包含400行动态c# 4.0代码。

Rob做这类事情已经有一段时间了,所以你可能会发现他对Massive的方法很有趣。

https://github.com/FransBouma/Massive