【发布时间】:2013-05-16 19:09:34
【问题描述】:
我想动态地向一个类添加属性并为它们设置值。有人可以为我指出一些教程或文章的正确方向,或者更好地提供一个示例。
我有一个在 foreach 循环中调用的基类。在这个类中,我需要添加多达 30 个属性并为它们设置值。
这是调用类的方法。
foreach (Class name in this.list)
{
ClassBeingCalled class = new ClassBeingCalled (name);
class.Populate();
this.newlist.Add(class);
}
现在在被调用的类中,我需要动态创建大约 30 个属性,这些属性将在该类的“Populate”方法中设置。
就这样……
foreach (PropertyToAssign count2 in listofproperties)
{
string name = "_nameofproperty" + count2.name
base.GetType().GetField(name, BindingFlags.NonPublic |
BindingFlags.Instance).SetValue(this, count2);
}
【问题讨论】:
-
只使用“listofproperties”而不是尝试创建动态属性有什么问题?如果它必须是动态的,请查看msdn.microsoft.com/en-us/library/vstudio/dd264741.aspx
-
这些东西存在为属性吗?即您是否尝试创建 new 属性?还是为现有属性赋值?
-
尝试创建新属性。目前,它有一组我想更改为动态的属性。例如,它有 10 个属性。但是,如果将新属性添加到属性列表中,则会在此处出错:base.GetType().GetField(name, BindingFlags.NonPublic | BindingFlags.Instance).SetValue(this, count2);因为有比定义更多的属性。
-
我认为您可能应该考虑只使用带有索引器的内部字典,因此您可以访问您的属性,例如
myObject["PropertyName"](您可以使用 ExpandObject 有效地实现相同的目标)。跨度> -
顺便说一句,标题中写着“属性”,但在填充方法中它反映了“字段”
标签: c#