大家好~假设我有个ArrayList,里面存放了 float, int, double,... 等多种型式的不同对象。若此时从ArrayList里拿出float型式对象,我这样声明: 
float ABC = (float)ArrayList[i];====
但是,若我想要在运行状态下自动声明不同型态的对象,要怎么办呢?有类似这样的(错误)办法吗: 
ArrayList[i].GetType() ABC = (ArrayList[i].GetType()) ArrayList[i];谢谢大家。

解决方案 »

  1.   

    (1) 使用泛型,推荐。
    (2) 使用 object 类型。
      

  2.   


    上面是举例,但实际上会具备更多不同的类型...
    (1)使用泛型不可行
    (2)使用object 类型?? 又如何存取对象的栏位与属性? 用反射?(3)若用Activator.CreateInstance 合适么???
      

  3.   

    ArrayList 要装箱拆箱,你觉得它比反射快?至少那些经常习惯拿性能说事的人会反驳你的
      

  4.   

    class ClassName<T>
    {
        public T GetElement(int id, List<T> list) { return list[i]; }
    }
      

  5.   

    什么叫做“不同类型对象”,你能够用个最简单的一行代码(最基本的c#代码)给我说明什么叫做“未知类型”这个概念?你会所得所谓“未知类型对象”,不就是回到了object上来了嘛?!那么你有绕回到ArrayList本身上来了。那么既然ArrayList就是对于object抽象类型、也就是具体对象的类型是可以任意的,你何必要搞个否定ArrayList?我们不使用ArrayList而使用强类型,是为了增强我们在编码之前就进行清晰的系统分析设计的能力。不是为了搞学术,搞什么“未知类型”。所以“未知类型”这个说法本身就是重复原始的ArrayList,没有实际新意。
      

  6.   


    息怒息怒...我知道我的问题了:
    不同类型的对象各自有不同的栏位,当然要各自处理。
    想要用一个简单的方法处理所有类型似乎是不可能的。
    所以还是用caozhy的,或直接用List<>。可我看到一博客上说:
    ~~~~~
    object myClass = new object();
    myClass = Activator.CreateInstance(myObj.GetType());这样一来myClass就完全拥有myObj的属性了~~
    ~~~~~"这样一来myClass就完全拥有myObj的属性了"???有那么好的事...??? 我搞乱了???
      

  7.   

    上面那个变量myClass已经变成了跟myObj一样类型的另一个实例了。
      

  8.   


    或者,如果你用 C#4 的话,可以尝试使用 dynamic 类型。
      

  9.   


    虽然我还在用C#2008,但msdn给的 dynamic 的例子看起来很合适, 试试看。
    另外,Activator.CreateInstance那个不但速度奇慢无比,且还是要再强制转换类型一次。
    谢谢各位啦~晚安
      

  10.   

    如果你在编程之前不搞清楚自己想要什么类型的对象,那么你说的“里面存放了 float, int, double,... 等多种型式的不同对象”就是这个意思。实际上你耽误了许多人的时间,这是一个语言游戏。
      

  11.   

    Dynamic类型涉及到的是反射方式来调用对象的属性和方法。而反射调用对象的属性和方法(也包括事件)这个是万不得已的,一般来说不要随便使用。还是从设计的时候,而不是编码的时候,就搞清楚你的类型,这比较好。要想让类型可变,可以使用面向对象设计中的继承和多态的概念,而不是编程中的反射。
      

  12.   

    是的,dynamic只是简化了反射的调用。但是反射并不是洪水猛兽,不知道为什么反射被妖魔化成性能低下、问题很多的代名词,但是具体情况具体分析的。
    另外赞同sp1234的说法,首先考虑的是设计层面的问题,这样的设计本身可以改良。
      

  13.   

    谢谢二位!sp1234的意思是先定义好接口,
    到时自然所有继承了该接口的对象就能被使用那些属性和方法。(应该是这样吧)使用反射时需要在众多的栏位、属性或方法中寻找,不知dynamic是怎么运作的。非有意玩弄文字,而是观念很不清楚(面相对象),没先搞清楚自己要做什么事情。
    基础不好,没上过正式的编程课且书也翻得太少了,总还是谢谢二位了。