Использование .NET 4, C #
Допустим, у меня есть класс Info
, который расширяет CustomTypeDescriptor
. Экземпляр класса Info
имеет словарь из <string, object>
пар, загруженных во время выполнения.
Я бы хотел иметь возможность выставлять ключи словаря как свойства (чтобы каждый экземпляр Info
имел разные свойства). Значения свойств должны быть соответствующими значениями в словаре.
Я дошел до разоблачения свойств:
public override PropertyDescriptorCollection GetProperties()
{
var orig = base.GetProperties();
var newProps = dictionary.Select( kvp =>
TypeDescriptor.CreateProperty(
this.GetType(),
kvp.key,
typeof(string)));
return new PropertyDescriptorCollection(
orig.Cast<PropertyDescriptor>()
.Concat(newProps)
.ToArray());
}
Проблема в том, как мне получить их значения?
var info = new Info(new Dictionary<string, object>{{"some_property", 5}};
var prop = TypeDescriptor.GetProperties(i_info)["some_property"];
var val = prop.GetValue(i_info); //should return 5
Единственный способ получить управление при вызове prop.GetValue()
- это переопределить GetPropertyOwner(PropertyDescriptor pd)
, но, как я понимаю, он ожидает, что я верну экземпляр другого типа , который имеет сопоставление реального (скомпилированного) свойства.
Я бы хотел сам написать фактическую реализацию свойства (для этого примера вернуть значение в словаре, ключ которого соответствует имени свойства).
Возможно ли это?