I have read at couple of places that, a generic collection class in the System.Collections.Generic namespace should be used instead of classes such as ArrayList in the System.Collections namespace. I am not able to understand, how is it better, as both are collection?
Generic collection types allow strongly typing your collections. Take for example this ArrayList, which we want to contain dogs:
ArrayList a = new ArrayList();
a.Add(new Dog());
If you want to get the first item out, you need to cast the result, since Dog d = a[0]; doesn't work. So we do this:
Dog d = (Dog)a[0];
but the compiler also allows this:
Cat c = (Cat)a[0];
Generics allow you to do this:
List<Dog> a = new List<Dog>();
a.Add(new Dog());
Dog d = a[0];
See! No casting. We don't have to help the compiler understand there can only be dogs inside that list. It knows that.
Also, this won't compile:
Cat c = a[0];
So: no boxing and unboxing, no runtime errors because there is a wrong cast. Type safety is a blessing for programmers and users. Use generic collections as much as you can, and only use non-generic collections if you have to.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With