PropertyDescriptorCollection - 对象与目标类型不匹配

时间:2016-04-05 13:31:59

标签: c# propertydescriptor icustomtypedescriptor

我有一个PropertyGrid,其中包含类型为class1的对象的SelectedObject。

我正在为ICustomTypeDescriptor对象实现class1接口,我从另一个对象PropertyDescriptorCollection获得class2,并且需要显示class2 PropertyGrid中的PropertyDescriptors以及class1 PropertyDescriptors

我在class2 PropertyDescriptors的PropertyGrid中显示以下错误:

  

对象与目标类型不匹配。

以下是我的代码,无法使用class2 PropertyDescriptors

public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
    PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(this);
    var propertyDescriptors = new List<PropertyDescriptor>();
    for (int i = 0; i < propertyDescriptorCollection.Count; i++)
    {
        propertyDescriptors.Add(propertyDescriptorCollection[i]);
    }
    return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}

以下是我正在处理的代码:

public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
    PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(this);
    var propertyDescriptors = new List<PropertyDescriptor>();
    for (int i = 0; i < propertyDescriptorCollection.Count; i++)
    {
        propertyDescriptors.Add(propertyDescriptorCollection[i]);
    }
    var class2PropertyDescriptorCollection = TypeDescriptor.GetProperties(class2);
    for (int i = 0; i < class2PropertyDescriptorCollection.Count; i++)
    {
        propertyDescriptors.Add(class2PropertyDescriptorCollection[i]);
    }
    return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}

当PropertyGrid中显示来自PropertyDescriptors的{​​{1}}时,如何显示class2中的PropertyDescriptors

1 个答案:

答案 0 :(得分:0)

您已将propertyDescriptorCollection声明为PropertyDescriptorCollection类型,但已使用var作为class2PropertyDescriptorCollection。如果您尝试以下操作该怎么办:

public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
    PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(this);
    var propertyDescriptors = new List<PropertyDescriptor>();
    for (int i = 0; i < propertyDescriptorCollection.Count; i++)
    {
        propertyDescriptors.Add(propertyDescriptorCollection[i]);
    }
    PropertyDescriptorCollection class2PropertyDescriptorCollection = TypeDescriptor.GetProperties(class2);
    for (int i = 0; i < class2PropertyDescriptorCollection.Count; i++)
    {
        propertyDescriptors.Add(class2PropertyDescriptorCollection[i]);
    }
    return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}