情况是这样的:public class Fruits
{...}public class apple:Fruits
{
}public class orange:Fruits
{
}
...//省略若干
public class kiwi:Fruits
{
}现在我有一个array:Fruits[] fruits=new Fruits[10];
fruits[0]=new apple();
fruits[1]=new orange();
...
fruits[9]=new ...()
然后,假设我不知道到底有多少种水果,但我需要把fruits里各个元素再转换回具体的水果:
就是说,怎么让程序自己判断fruits[0]是什么,然后转换类型希望的效果是:
  第一步,获取fruits[0]的类型,假设为XXX型
  然后 XXX temp=(XXX)fruits[0];
请教这个过程该怎么实现呢?
求高手指点!! 
谢谢!!!

解决方案 »

  1.   

    如下,比较简单的判断
    如果你所指的"不知道到底有多少种水果"指Fruits有多少个子类也不知?
    这个就可能比较麻烦了,需要用反射using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ClassAndChildClass
    {
        class Program
        {
            static void Main(string[] args)
            {
                Fruits[] fs = new Fruits[2];
                fs[0] = new apple();
                fs[1] = new orange();            //List<object> lst  =new List<object>();
                foreach (Fruits f in fs)
                {
                    String a = f.GetType().Name;
                    switch (a)
                    {
                        case "apple":
                            apple tempa = (apple)f;
                            tempa.print();
                            break;
                        case "orange":
                            orange tempo = (orange)f;
                            tempo.print();
                            break;
                        default:
                            break;
                    }
                }
                Console.ReadKey();
            }
        }    public class Fruits
        {
            public Fruits()
            {
                Console.WriteLine("Fruits");
            }
            public void print()
            {
                // do something
            }
        }    public class apple : Fruits
        {
            public apple()
            {
                Console.WriteLine("apple");
            }
        }    public class orange : Fruits
        {
            public orange()
            {
                Console.WriteLine("orange");
            }
        }
    }