我正在尝试动态创建对象,但我不知道如何操作。我需要的是,我有一个该对象的类,对象属性存储在数据库中。然后我需要比较每个对象的属性以获得所需的结果。
所以我需要动态创建具有从数据库加载属性的对象。
答案 0 :(得分:1)
我认为您不需要动态创建对象,只需创建一个与您的数据库模式匹配的静态对象和属性详细信息,然后您可以跨行或在对象的实例中比较属性的值。 / p>
答案 1 :(得分:1)
我一直在做类似的事情。有几件事:
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类,您可以获取属性,获取属性名称,获取与属性关联的属性等。强大的技术。您应该能够通过上述信息做您需要的事情,但如果不能让我知道,我会添加更多信息。
答案 2 :(得分:0)
您在谈论Dictionary
吗?
var dict=new Dictionary<string, string>();
dict.Add("property1", "val1");
dict.Add("property2", "val2");
var prop2val=dict["property2"];
答案 3 :(得分:0)
也许Activator是你想要的?
http://msdn.microsoft.com/en-us/library/system.activator.aspx
答案 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)
您可以使用反射来动态构建对象:
答案 7 :(得分:0)
我认为您希望从DB中检索行并直接将它们分配给对象,前提是该对象的属性等同于DB表的列。如果那就是你的意思那么我相信你不能:)
答案 8 :(得分:0)
http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive
这里解释了一些代码,例如:
http://blog.wekeroad.com/microsoft/the-super-dynamic-massive-freakshow