I have the following code:
PropertyDescriptorCollection myColl = myObj.GetPropertyDescriptionCollection();
PropertyDescriptor pd = myObj.GetOneOfYourPropertyDescriptors();
if (myColl.Contains(pd))
{
myColl.Remove(pd);
}
For some reason, when it runs the line “myColl.Remove(pd);”, I get an exception thrown that says:
An unhandled exception of type ‘System.ArgumentException’ occurred in system.dll
Additional information: Source array was not long enough. Check srcIndex and length, and the array’s lower bounds.
at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length)
at System.ComponentModel.PropertyDescriptorCollection.RemoveAt(Int32 index)
at System.ComponentModel.PropertyDescriptorCollection.Remove(PropertyDescriptor value)
If I do:
PropertyDescriptorCollection myColl = myObj.GetPropertyDescriptionCollection();
PropertyDescriptor pd = myObj.GetOneOfYourPropertyDescriptors();
bool found = false;
foreach (PropertyDescriptor currentPD in myColl)
{
if (currentPD.Equals(pd))
{
found = true;
break;
}
}
The variable “found” ends up being true. So I know that the collection definately contains the item. So is this a bug in the framework? Is PropertyDescriptorCollection.Remove(…) not written correctly by Microsoft?
One Response
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.
Did you ever determine a workaround for this bug? I"m about to implement by own PropertyDescriptorCollection where Remove will work. I just hope that DataBinding likes my collection. Before I go down that track it would be could to know what if any solution you found.
Cheers,
Andrew