'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 文件中删除该现有数据节点。
我有一个像这样的 属性 控件:
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-setterprivate 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 文件中删除该现有数据节点。