'X[]' 类型的对象无法转换为 'X[]' 类型

Object of type 'X[]' cannot be converted to type 'X[]'

我有一个像这样的 属性 控件:

public BindingList<I> X { get; private set; } = new SortableBindingList<I>();

其中I是接口。它构建良好,运行良好,但是当我将此控件添加到表单时(表单是否在同一程序集中无关紧要),然后尝试在 visual studio (2017) 中打开该表单,表单未显示,并出现以下错误消息:

Object of type 'I[]' cannot be converted to type 'I[]'.

调用堆栈为:

at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) at System.Reflection.RtFieldInfo.UnsafeSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) at System.Runtime.Serialization.FormatterServices.SerializationSetValue(MemberInfo fi, Object target, Object value) at System.Runtime.Serialization.ObjectManager.CompleteObject(ObjectHolder holder, Boolean bObjectFullyComplete) at System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(ObjectHolder holder) at System.Runtime.Serialization.ObjectManager.RegisterObject(Object obj, Int64 objectID, SerializationInfo info, Int64 idOfContainingObj, MemberInfo member, Int32[] arrayIndex) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.RegisterObject(Object obj, ParseRecord pr, ParseRecord objectPr, Boolean bIsString) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObjectEnd(ParseRecord pr) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse(ParseRecord pr) at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run() at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream) at System.Resources.ResXDataNode.GenerateObjectFromDataNodeInfo(DataNodeInfo dataNodeInfo, ITypeResolutionService typeResolver) at System.Resources.ResXDataNode.GetValue(ITypeResolutionService typeResolver) at System.Resources.ResXResourceReader.ParseDataNode(XmlTextReader reader, Boolean isMetaData) at System.Resources.ResXResourceReader.ParseXml(XmlTextReader reader)

我尝试添加

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

分别按照 and ;

我也试过用

替换getter-setter
private BindingList<I> myX = new SortableBindingList<I>();
public BindingList<I> myX { get { return myX; } }

根据

无济于事。我试过关闭所有打开的文档、关闭解决方案、重新启动 visual studio、重建两个程序集,似乎无法解决这个问题。

我能够使用它

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public BindingList<I> myX { get; private set; } = new SortableBindingList<I>();

AND 通过编辑包含表单(不是控件的)的 .resx 文件并删除如下所示的 xml 元素:

  <data name="controlName.X" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAJsBSW50ZXJmYWNlc0ludmVzdG1lbnRzLCBWZXJzaW9uPTEuMC4w
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dLCBtc2NvcmxpYiwgVmVyc2lv
        bj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkM
        AwAAAExJbnRlcmZhY2VzSW52ZXN0bWVudHMsIFZlcnNpb249MS4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
        LCBQdWJsaWNLZXlUb2tlbj1udWxsBQEAAABOU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAx
        W1tLYW1hVHJlbmRhLkludGVyZmFjZXMuSW52ZXN0bWVudHMuSVBvc2l0aW9uAwAAAAZfaXRlbXMFX3Np
        emUIX3ZlcnNpb24EAAAtS2FtYVRyZW5kYS5JbnRlcmZhY2VzLkludmVzdG1lbnRzLklQb3NpdGlvbltd
        AwAAAAgIAgAAAAkEAAAAAAAAAAAAAAAHBAAAAAABAAAAAAAAAAQrS2FtYVRyZW5kYS5JbnRlcmZhY2Vz
        LkludmVzdG1lbnRzLklQb3NpdGlvbgMAAAAL
</value>
  </data>

似乎仅添加 DesignerSerializationVisibility.Hidden 不足以从现有 .resx 文件中删除该现有数据节点。