如何用c#动态创建对象
本文关键字:创建对象 动态 何用 | 更新日期: 2023-09-27 17:50:38
我试图动态创建对象,但我不知道如何。我需要的是,我有一个对象的类,对象属性存储在数据库中。然后,我需要比较每个对象的属性以获得所需的结果。
所以我需要动态地创建对象与属性从数据库加载。
我一直在做类似的事情。有几件事:
- 包含
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类,你可以获取属性,获取属性名,获取与属性相关的属性,等等。强大的技术。你应该能够做你需要与上述信息,但如果不让我知道,我会添加更多的信息。
如果你有很多对象你想从数据库值实例化它可以这样做。
//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