俺在运行一个C#程序时抛出如下错误:
未处理的“System.InvalidCastException”类型的异常出现在 ConsoleApplication2.exe 中。
其他信息: 指定的转换无效。
错误停在这一行上: Hotel Show_hot=(Hotel)o;
不知为何?

解决方案 »

  1.   

    主要涉及的源代码如下:
    using System;
    using System.Collections;
    //………省略………namespace ConsoleApplication2
    {
    class Hotel
    {
    public string City;
    public int Hotel_id;
    public string Hotel_name;
    public int Room_number;
    public int Room_price;
    public int Spare_room;
    protected internal char Flag_hotel='n';
    }
    class Show
    {
    public int count=0;
    public void main()
    {
    System.Console.WriteLine("                  ┏━━━━━━━━━━━━━━━━━━━━┓");
    System.Console.WriteLine("                  ┃            旅馆预订系统v1.0            ┃");
    System.Console.WriteLine("                  ┗━━━━━━━━━━━━━━━━━━━━┛");
    System.Console.WriteLine("                  ┌────────────────────┐");
    System.Console.WriteLine("                  │     1.加入新旅馆信息                   │");
    System.Console.WriteLine("                  ├────────────────────┤");
    System.Console.WriteLine("                  │     2.加入新度假村信息                 │");
    System.Console.WriteLine("                  ├────────────────────┤");
    System.Console.WriteLine("                  │     3.加入新预订信息                   │");
    System.Console.WriteLine("                  ├────────────────────┤");
    System.Console.WriteLine("                  │     4.取消预订信息                     │");
    System.Console.WriteLine("                  ├────────────────────┤");
    System.Console.WriteLine("                  │     5.查看某城市旅馆与度假村详细信息   │");
    System.Console.WriteLine("                  ├────────────────────┤");
    System.Console.WriteLine("                  │     6.显示某旅馆与度假村信息           │");
    System.Console.WriteLine("                  ├────────────────────┤");
    System.Console.WriteLine("                  │     7.退出本系统                       │");
    System.Console.WriteLine("                  └────────────────────┘");
    System.Console.Write("                  请按操作编号:");
    count=int.Parse(System.Console.ReadLine());
    System.Console.WriteLine("                  Count的值为:"+count);
    }
    }
    class Operation
    {
    public void Add_hotel(Hotel hot0)
    {
    System.Console.WriteLine("                  填写新旅店信息");
    System.Console.Write("                  填写新旅店所在城市名:");
    hot0.City=System.Console.ReadLine();
    System.Console.Write("                  填写新旅店的编号:");
    hot0.Hotel_id=int.Parse(System.Console.ReadLine());
    System.Console.Write("                  填写新旅店的名字:");
    hot0.Hotel_name=System.Console.ReadLine();
    System.Console.Write("                  填写新旅店的房间数量:");
    hot0.Room_number=int.Parse(System.Console.ReadLine());
    System.Console.Write("                  填写新旅店的房间价格:");
    hot0.Room_price=int.Parse(System.Console.ReadLine());
    System.Console.Write("                  填写新旅店的可预订房间数量:");
    hot0.Spare_room=int.Parse(System.Console.ReadLine());
    System.Console.Write("                  添加旅店信息完毕,请问是否继续增加(y/n):");
    hot0.Flag_hotel=char.Parse(System.Console.ReadLine( ));
    }
    } class Test
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    char Flag=' ';
    char Quit_flag=' ';
    Show Mainsys=new Show();
    ArrayList al=new ArrayList();
    Hotel hotel0=new Hotel();
    Operation h0=new Operation();
    do
    {
    Flag=' ';
    cls.Clear();
    Mainsys.main();
    switch(Mainsys.count)
    {
    case 1:
    //………省略………
    break;
    case 2:
    //………省略………
    break;
    case 3:
    //………省略………
    break;
    case 4:
    //………省略………
    break;
    case 5:
    foreach( object o in al)
    {
    Hotel Show_hot=(Hotel) o; //取集合中元素 <问题就出在这里!>
    System.Console.WriteLine("      ====================    查看旅馆信息   ===================");
    System.Console.WriteLine("所在城市名:"+Show_hot.City);
    System.Console.WriteLine("旅店编号:"+Show_hot.Hotel_id);
    System.Console.WriteLine("旅店名称:"+Show_hot.Hotel_name);
    System.Console.WriteLine("房间数量:"+Show_hot.Room_number);
    System.Console.WriteLine("房间价格:"+Show_hot.Room_price);
    System.Console.WriteLine("可预定房间的数量:"+Show_hot.Spare_room);
    }
    break;
    case 6:
    //………省略………
    break;
    case 7:
    //………省略………
    break;
    default:
    //………省略………
    break;
    }
    }
    while(Flag=='y'||Flag=='Y');
    System.Console.Read();
    }
    }
    }
      

  2.   

    问题出在 Hotel Class 里的强制类型转换函数,贴上面这段代码没任何意义在 Hotel Class里检查强制类型转换函数或贴出来
      

  3.   

    对象o和hotel类型不兼容,检查是否为null
      

  4.   

    类型转换错误吗!你首先检查ArrayList的赋值过程,看每一个element的类型你可以这样测试一下:
    foreach(object o in al)
    {
        if (o is Hotel)
        {
            赋值
        }
        else
        {
            Console.WriteLine(o.GetType().ToString());
        }
    }