我想动态创建对象,但我不知道如何去做。我需要的是,我有一个该对象的类,并且对象属性存储在数据库中。然后我需要比较每个对象的属性以获得所需的结果。如何用C#动态创建对象?
所以我需要动态地创建对象与从数据库加载的属性。
我想动态创建对象,但我不知道如何去做。我需要的是,我有一个该对象的类,并且对象属性存储在数据库中。然后我需要比较每个对象的属性以获得所需的结果。如何用C#动态创建对象?
所以我需要动态地创建对象与从数据库加载的属性。
如果您想要从数据库值实例化多个对象,可以这样做。
//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"];
我不认为你需要动态创建对象,只需创建你的数据库架构与性能的细节匹配一个静态的,那么你就可以跨行属性的值进行比较,或内你的对象的实例。
你能举个例子吗? – 2011-04-19 16:03:30
你可以使用反射来动态建立的对象:
我认为,要检索从DB行,是直接分配给对象鉴于对象的属性等同于DB表的列。如果你的意思是那么我相信你不能:)
我一直在研究类似的东西。有几件事情:
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类,您可以获取属性,获取属性名称,获取与属性关联的属性等。强大的技术。你应该能够做到你需要的上述信息,但如果不让我知道,我会添加更多的信息。
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
你有一个需要从数据库填充的对象模型,或者你想有对象动态属性? – Oded 2011-04-19 15:43:47
是的。我有一个需要从DB填充的对象模型。就像我将创建5个对象,然后比较它们的属性。 – 2011-04-19 15:45:23
你能解释一下你在做这件事时遇到了什么问题吗?什么是确切的问题? – Oded 2011-04-19 15:46:39