找不到String的构造函数

如果我在包含ListDictionary (使用GenericDictionaryEditor )的属性网格中有一个对象,当我单击属性旁边的详细信息并单击add时,会弹出一条消息说明找不到构造函数(列表)或找不到无参数构造函数(对于字典)。 我真的不了解编辑或财产网格,任何帮助将不胜感激。

 [DataMember(Name="FolderPaths")] [ReadOnly(false)] [Description("List of folder paths")] [Editor(typeof(Wexman.Design.GenericDictionaryEditor), typeof(UITypeEditor))] [Wexman.Design.GenericDictionaryEditor(Title="Folder Paths")] public Dictionary FolderPaths { get; set; } 

这个说没有为System.string []找到构造函数。

 [DataMember(Name="FolderPaths")] [ReadOnly(false)] [Description("List of folder paths")] public List FolderPaths { get; set; } 

一种解决方案是为string[]类型注册TypeDescriptionProvider 。 下面是示例代码(您需要在显示任何属性网格之前在程序开头注册):

 ... TypeDescriptor.AddProvider(new StringArrayDescriptionProvider(), typeof(string[])); ... 

这是StringArrayDescriptionProvider代码:

 public class StringArrayDescriptionProvider : TypeDescriptionProvider { private static TypeDescriptionProvider _baseProvider; static StringArrayDescriptionProvider() { // get default metadata _baseProvider = TypeDescriptor.GetProvider(typeof(string[])); } public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args) { // this is were we define create the instance // NB: .NET could do this IMHO... return Array.CreateInstance(typeof(string), 0); } public override IDictionary GetCache(object instance) { return _baseProvider.GetCache(instance); } public override ICustomTypeDescriptor GetExtendedTypeDescriptor(object instance) { return _baseProvider.GetExtendedTypeDescriptor(instance); } public override string GetFullComponentName(object component) { return _baseProvider.GetFullComponentName(component); } public override Type GetReflectionType(Type objectType, object instance) { return _baseProvider.GetReflectionType(objectType, instance); } public override Type GetRuntimeType(Type reflectionType) { return _baseProvider.GetRuntimeType(reflectionType); } public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { return _baseProvider.GetTypeDescriptor(objectType, instance); } public override bool IsSupportedType(Type type) { return _baseProvider.IsSupportedType(type); } } 

这是它的样子: 在此处输入图像描述