日期:2014-05-17  浏览次数:20867 次

什么时候不用泛型?
        string[] strArr = File.ReadAllLines(@"D:\资源\15W.txt", Encoding.Default);
        ArrayList list= new ArrayList();
foreach(string i in list)
{
....
}


对比用泛型

list<string> list=new list<string>();


记录了一下执行时间,发现时间一样,那请问,我为什么还要用泛型,没有发现泛型list<>比arraylist好在哪里?说是减少拆箱过程,可是我都知道了数组里面是string,arraylist也不会出现拆箱的,那请问为什么还要存在泛型?
------最佳解决方案--------------------
引用
那请问为什么还要存在泛型?


泛型每一个元素已经是string了,直接用可以;而ArrayList的元素是object,使用时需要转换,不方便。
------其他解决方案--------------------
泛型比较明显的优势有
1、类型安全(比如自定义的User里面有print方法,这时候如果你不用泛型List<User>然后循环调用print方法而是采用Array存放User的对象的话,循环调用对象的print方法就不一定能成功了,因为你可以把字符串放到Array中,因为Array里面存放的是object类型
2、避免装箱拆箱,你用Array存放10万条int类型对比List<int>存放10万条数据处理就能够看出性能差距来了
3、减少代码量,比如针对不同的类型进行相同的操作,使用泛型就不用重复写相同的代码,编写一个泛型方法,传递不同的类型参数就可以了。
------其他解决方案--------------------
string是引用类型,放在泛型列表或ArrayList中使用都不会发生装箱和拆箱,但是会有类型转换(object-string),不过这种类型转换开销很小,在数据量不大的情况下可以忽略不计。
------其他解决方案--------------------
泛型是强类型,不需要Object到具体类型的转换过程,因此不会出现转换错误,而你这里ArrayList里面如果还有非string类型的数据,则你这种取值将会出错,无法直接转换到string类型。
------其他解决方案--------------------
哦,是说在把数据装入arraylist的时候,会产生OBJECT-〉string这样的过程吗?
public virtual int Add(
Object value
)

这是MSDN代码,那么实际的过程是这样的对吗?用arrayList的时候:

list.add(object(string))

就是说,arrayList里面实际存储的类型是string?

那么什么情况下用泛型呢?我实在想不出有需要泛型的场合,难道是这样的情况?

list.add(object(int类型的东西))
是这样的场合吗?
------其他解决方案--------------------
上面第一句话反了,是string->object
------其他解决方案--------------------
我上面写错了,是arraylist实际存储的是object对吧,那我就理解了