我们有一个设置,其中使用属性网格来设置某个给定类的属性。其中一些属性是对我们想要通过引用设置的其他类的引用。
对于这些属性,设置了适当的UITypeEditor
,并且在将属性网格与一个源类一起使用时可以正常工作。
由于我们能够选择多个类并为它们设置属性,因此我们意识到了一个问题。
选择多个类并编辑属性时,传递到PropertyDescriptor
的{{1}}是一个名为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!
...
接口。有问题的类具有用于其他目的的克隆接口。为了在设置一个类作为其他接口的参考时保持链接一致性必须不能使用。
我无法想出一种正确的方法来确保选择一个或多个类是否保证不会深度复制这些类。