楼主 我感觉你的代码有问题Inf 是哪里来的?
BList2[0] 是什么时候赋值的?不过我估计应该是因为你BList2[0] 也就是ALis[0] 存的是一个AS结构体的实例
所以这句正常 Inf1 = (AS )(BLis2[0]);//正常运行; 而这里就不行了 Inf2 = (BS )(BLis2[0]);//{"指定的转换无效。" }因为你没有定义AS转化为BS结构的规则啊 虽然他们看起来结构一样的~

解决方案 »

  1.   

    Inf1 = (AS )(BLis2[0]);//正常运行;BLis2[0]是一个AS的对象Inf2 = (BS )(BLis2[0]);//{"指定的转换无效。" } AS的对象无法转换为BS对象Inf2 = (BS )Inf1;      //{"指定的转换无效。" } AS的对象无法转换为BS对象
    AS和BS是不兼容的类型,当然无法转换了.
      

  2.   

    谢谢各位,代码如下:
    private ArrayList ALis1 = new ArrayList (); 
    public ArrayList ALis1Status 

       set { ALis1Status= value;} 

    private struct AS 

       public float LoaX; 
       public float LoaY; 
    }; 
    private AS Inf1; 
    private ArrayList BLis2 = new ArrayList (); 
    private struct BS //每组数据以结构体的形式存储; 
    {    
       public float LoaX; 
       public float LoaY; 
    }; 
    private BS Inf2; 
    private void button1_Click(object sender, System.EventArgs e) 

      Inf1.LoaX=1; 
      Inf1.LoaY=2; 
      BLis2.Add (Inf1);

    private void button2_Click(object sender, System.EventArgs e) 

    BLis2 = ALis1 ; 
    Inf1 = (AS )(BLis2[0]);//正常运行; 
    Inf2 = (BS )(BLis2[0]);//{"指定的转换无效。" } 
    Inf2 = (BS )Inf1;      //{"指定的转换无效。" } 
      

  3.   

    谢谢各位,代码如下: 
    private ArrayList ALis1 = new ArrayList ();  
    public ArrayList ALis1Status  
    {  
       set { ALis1Status= value;}  
    }  
    private struct AS  
    {  
       public float LoaX;  
       public float LoaY;  
    };  
    private AS Inf1;  
    private ArrayList BLis2 = new ArrayList ();  
    private struct BS //每组数据以结构体的形式存储;  
    {     
       public float LoaX;  
       public float LoaY;  
    };  
    private BS Inf2;  
    private void button1_Click(object sender, System.EventArgs e)  
    {  
      Inf1.LoaX=1;  
      Inf1.LoaY=2;  
      ALis1.Add (Inf1); 
    }  
    private void button2_Click(object sender, System.EventArgs e)  
    {  
    BLis2 = ALis1 ;  
    Inf1 = (AS )(BLis2[0]);//正常运行;  
    Inf2 = (BS )(BLis2[0]);//{"指定的转换无效。" }  
    Inf2 = (BS )Inf1;      //{"指定的转换无效。" }  
      

  4.   

    ArrayList 的类型本来就不是安全的。
      

  5.   

    因为你BList2[0] 也就是ALis[0] 存的是一个AS结构体的实例 
    所以虽然BList[0]是一个object对象 但可以正常强制转化为一个AS类型的对象
    也就是这句正常 Inf1 = (AS )(BLis2[0]);//正常运行;  而这里就不行了 Inf2 = (BS )(BLis2[0]);//{"指定的转换无效。" } 因为虽然他们看起来结构是一摸一样的~ 
    但是是2个不同类型的对象
    你要把实际上类型是AS结构的object转化为BS结构的
    却没有定义AS转化为BS结构的规则就是指定的转换无效了
    只是指出问题所在了
    不知道楼主要干什么  
    所以也指不出解决办法了