更具体地说:
1)我能否为属性分配类型描述符?
2)如果可以,最好的方法是在运行时获取类型转换器。
基本上,我有一些配置对象,使用反射进行填充。到目前为止,这只适用于简单类型(字符串、整数、日期时间),但我希望支持将逗号分隔的列表转换为List。
到目前为止,我通过从List<T>
派生自定义类型“ConvertableList<T>
”,并使用自定义类型转换器对其进行修饰来实现此目的。
更具体地说:
1)我能否为属性分配类型描述符?
2)如果可以,最好的方法是在运行时获取类型转换器。
基本上,我有一些配置对象,使用反射进行填充。到目前为止,这只适用于简单类型(字符串、整数、日期时间),但我希望支持将逗号分隔的列表转换为List。
到目前为止,我通过从List<T>
派生自定义类型“ConvertableList<T>
”,并使用自定义类型转换器对其进行修饰来实现此目的。
您可以将TypeConverter
与现有类型关联,例如:
TypeDescriptor.AddAttributes(typeof(List<int>),
new TypeConverterAttribute(typeof(MyTypeConverter)));
在启动过程中的某个位置
然后,要获取转换器,标准代码应该可以工作:
TypeConverter conv = TypeDescriptor.GetConverter(typeof(List<int>));
或者:
object obj = new List<int>();
...
TypeConverter conv = TypeDescriptor.GetConverter(obj);
TypeDescriptor
的任何代码,是的。但是有些代码可能会决定检查IList
(非泛型)并以某种方式进行特殊处理。我无法更改他们的特殊情况代码。 - Marc GravellTypeDescriptor.GetProvider
)并将旧值(TypeDescriptor.AddProvider
)推回来来实现。 - Marc Gravell