C# MergePropertyDescriptor克隆值,而标准属性描述符不克隆值

C# MergePropertyDescriptor克隆值,而标准属性描述符不克隆值,c#,winforms,propertygrid,C#,Winforms,Propertygrid,我们有一个设置,其中属性网格用于设置特定给定类的属性。其中一些属性是对我们希望通过引用设置的其他类的引用。 对于这些属性,将设置一个适当的UITypeEditor,并且当将属性网格与一个源类一起使用时,它将起作用 因为我们能够选择多个类并为它们设置属性,所以我们意识到了一个问题。 选择多个类并编辑属性时,PropertyDescriptor会传递到我们的CustomUITypeEditor中。EditValue是一个名为MergePropertyDescriptor的内部类 不幸的是,此描述符的

我们有一个设置,其中属性网格用于设置特定给定类的属性。其中一些属性是对我们希望通过引用设置的其他类的引用。 对于这些属性,将设置一个适当的
UITypeEditor
,并且当将属性网格与一个源类一起使用时,它将起作用

因为我们能够选择多个类并为它们设置属性,所以我们意识到了一个问题。 选择多个类并编辑属性时,
PropertyDescriptor
会传递到我们的
CustomUITypeEditor中。EditValue
是一个名为
MergePropertyDescriptor
的内部类

不幸的是,此描述符的
SetValue
使用以下代码调用了
CopyValue

private object CopyValue(object value)
{
  if (value == null)
    return value;
  Type type = value.GetType();
  if (type.IsValueType)
    return value;
  object obj1 = (object) null;
  ICloneable cloneable = value as ICloneable;
  if (cloneable != null)
    obj1 = cloneable.Clone();  // <!---------------------- class is cloned!

...
私有对象CopyValue(对象值)
{
如果(值==null)
返回值;
Type Type=value.GetType();
if(type.IsValueType)
返回值;
对象obj1=(对象)null;
ICLONABLE cloneable=ICLONABLE的值;
if(可克隆!=null)
obj1=cloneable.Clone()//