大家好~假设我有个ArrayList,里面存放了 float, int, double,... 等多种型式的不同对象。若此时从ArrayList里拿出float型式对象,我这样声明:
float ABC = (float)ArrayList[i];====
但是,若我想要在运行状态下自动声明不同型态的对象,要怎么办呢?有类似这样的(错误)办法吗:
ArrayList[i].GetType() ABC = (ArrayList[i].GetType()) ArrayList[i];谢谢大家。
float ABC = (float)ArrayList[i];====
但是,若我想要在运行状态下自动声明不同型态的对象,要怎么办呢?有类似这样的(错误)办法吗:
ArrayList[i].GetType() ABC = (ArrayList[i].GetType()) ArrayList[i];谢谢大家。
(2) 使用 object 类型。
上面是举例,但实际上会具备更多不同的类型...
(1)使用泛型不可行
(2)使用object 类型?? 又如何存取对象的栏位与属性? 用反射?(3)若用Activator.CreateInstance 合适么???
{
public T GetElement(int id, List<T> list) { return list[i]; }
}
息怒息怒...我知道我的问题了:
不同类型的对象各自有不同的栏位,当然要各自处理。
想要用一个简单的方法处理所有类型似乎是不可能的。
所以还是用caozhy的,或直接用List<>。可我看到一博客上说:
~~~~~
object myClass = new object();
myClass = Activator.CreateInstance(myObj.GetType());这样一来myClass就完全拥有myObj的属性了~~
~~~~~"这样一来myClass就完全拥有myObj的属性了"???有那么好的事...??? 我搞乱了???
或者,如果你用 C#4 的话,可以尝试使用 dynamic 类型。
虽然我还在用C#2008,但msdn给的 dynamic 的例子看起来很合适, 试试看。
另外,Activator.CreateInstance那个不但速度奇慢无比,且还是要再强制转换类型一次。
谢谢各位啦~晚安
另外赞同sp1234的说法,首先考虑的是设计层面的问题,这样的设计本身可以改良。
到时自然所有继承了该接口的对象就能被使用那些属性和方法。(应该是这样吧)使用反射时需要在众多的栏位、属性或方法中寻找,不知dynamic是怎么运作的。非有意玩弄文字,而是观念很不清楚(面相对象),没先搞清楚自己要做什么事情。
基础不好,没上过正式的编程课且书也翻得太少了,总还是谢谢二位了。