我有一個程序員可以用來動態添加新屬性的類。爲此,它實現了ICustomTypeDescriptor
以便能夠覆蓋GetProperties()
方法。在運行時添加屬性
public class DynamicProperty
{
public object Value { get; set; }
public Type Type { get; set; }
public string Name { get; set; }
public Collection<Attribute> Attributes { get; set; }
}
public class DynamicClass : ICustomTypeDescriptor
{
// Collection to code add dynamic properties
public KeyedCollection<string, DynamicProperty> Properties
{
get;
private set;
}
// ICustomTypeDescriptor implementation
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
{
// Properties founded within instance
PropertyInfo[] instanceProps = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
// Fill property collection with founded properties
PropertyDescriptorCollection propsCollection =
new PropertyDescriptorCollection(instanceProps.Cast<PropertyDescriptor>().ToArray());
// Fill property collection with dynamic properties (Properties)
foreach (var prop in Properties)
{
// HOW TO?
}
return propsCollection;
}
}
是否可以遍歷屬性列表中的每個屬性添加到PropertyDescriptorCollection
?
基本上我希望程序員能夠將DynamicProperty
添加到將由GetProperties
處理的集合中。喜歡的東西:
new DynamicClass()
{
Properties = {
new DynamicProperty() {
Name = "StringProp",
Type = System.String,
Value = "My string here"
},
new DynamicProperty() {
Name = "IntProp",
Type = System.Int32,
Value = 10
}
}
}
現在那些Properties
將設置好的,以實例的屬性,只要GetProperties
被調用。我是否認爲這是正確的方式?
'propertyType'是屬性本身的類型吧?那麼componentType呢?它是屬性所在的對象的類型? – Joao 2011-05-29 07:32:54
'propertyType'是動態屬性的類型。如果你有一個名爲'Count'的動態整數屬性,它會是'typeof(int)'。 'componentType'是具有動態屬性的類的類型,例如'typeof運算(MyDynamicPropertyClass)'。 – 2011-05-29 07:37:30
還有一個問題。這樣,如果以前通過'Properties'列表添加的屬性是動態訪問的(例如使用'var'),我可以確定使用'GetProperties()'來訪問所述屬性嗎? – Joao 2011-05-29 07:40:31