问题描述
privateArrayListALis1=newArrayList();publicArrayListALis1Status{set{ALis1Status=value;}}privatestructAS{publicfloatLoaX;publicfloatLoaY;};privateASInf1;privateArrayListBLis2=newArrayList();privatestructBS//每组数据以结构体的形式存储;{publicfloatLoaX;publicfloatLoaY;};privateBSInf2;privatevoidbutton1_Click(objectsender,System.EventArgse){Inf.LoaX=1;Inf.LoaY=2;}privatevoidbutton2_Click(objectsender,System.EventArgse){BLis2=ALis1;Inf1=(AS)(BLis2[0]);//正常运行;Inf2=(BS)(BLis2[0]);//{"指定的转换无效。"}Inf2=(BS)Inf1;//{"指定的转换无效。"}}问题就在于:后面两句,我不知道为什么?Inf2=(BS)(BLis2[0]);//{"指定的转换无效。"}Inf2=(BS)Inf1;//{"指定的转换无效。"}
解决方案
解决方案二:
楼主我感觉你的代码有问题Inf是哪里来的?BList2[0]是什么时候赋值的?不过我估计应该是因为你BList2[0]也就是ALis[0]存的是一个AS结构体的实例所以这句正常Inf1=(AS)(BLis2[0]);//正常运行;而这里就不行了Inf2=(BS)(BLis2[0]);//{"指定的转换无效。"}因为你没有定义AS转化为BS结构的规则啊虽然他们看起来结构一样的~
解决方案三:
希望把代码贴完整
解决方案四:
前半部分代码可能有问题
解决方案五:
Inf1=(AS)(BLis2[0]);//正常运行;BLis2[0]是一个AS的对象Inf2=(BS)(BLis2[0]);//{"指定的转换无效。"}AS的对象无法转换为BS对象Inf2=(BS)Inf1;//{"指定的转换无效。"}AS的对象无法转换为BS对象AS和BS是不兼容的类型,当然无法转换了.
解决方案六:
谢谢各位,代码如下:privateArrayListALis1=newArrayList();publicArrayListALis1Status{set{ALis1Status=value;}}privatestructAS{publicfloatLoaX;publicfloatLoaY;};privateASInf1;privateArrayListBLis2=newArrayList();privatestructBS//每组数据以结构体的形式存储;{publicfloatLoaX;publicfloatLoaY;};privateBSInf2;privatevoidbutton1_Click(objectsender,System.EventArgse){Inf1.LoaX=1;Inf1.LoaY=2;BLis2.Add(Inf1);}privatevoidbutton2_Click(objectsender,System.EventArgse){BLis2=ALis1;Inf1=(AS)(BLis2[0]);//正常运行;Inf2=(BS)(BLis2[0]);//{"指定的转换无效。"}Inf2=(BS)Inf1;//{"指定的转换无效。"}}
解决方案七:
谢谢各位,代码如下:privateArrayListALis1=newArrayList();publicArrayListALis1Status{set{ALis1Status=value;}}privatestructAS{publicfloatLoaX;publicfloatLoaY;};privateASInf1;privateArrayListBLis2=newArrayList();privatestructBS//每组数据以结构体的形式存储;{publicfloatLoaX;publicfloatLoaY;};privateBSInf2;privatevoidbutton1_Click(objectsender,System.EventArgse){Inf1.LoaX=1;Inf1.LoaY=2;ALis1.Add(Inf1);}privatevoidbutton2_Click(objectsender,System.EventArgse){BLis2=ALis1;Inf1=(AS)(BLis2[0]);//正常运行;Inf2=(BS)(BLis2[0]);//{"指定的转换无效。"}Inf2=(BS)Inf1;//{"指定的转换无效。"}}
解决方案八:
各位帮个忙解决一下
解决方案九:
ArrayList的类型本来就不是安全的。
解决方案十:
因为你BList2[0]也就是ALis[0]存的是一个AS结构体的实例所以虽然BList[0]是一个object对象但可以正常强制转化为一个AS类型的对象也就是这句正常Inf1=(AS)(BLis2[0]);//正常运行;而这里就不行了Inf2=(BS)(BLis2[0]);//{"指定的转换无效。"}因为虽然他们看起来结构是一摸一样的~但是是2个不同类型的对象你要把实际上类型是AS结构的object转化为BS结构的却没有定义AS转化为BS结构的规则就是指定的转换无效了只是指出问题所在了不知道楼主要干什么所以也指不出解决办法了