tags:

views:

115

answers:

4

I want to be able to be able to quickly cast an array of objects to a different type, such as String, but the following code doesn't work:

String[] a = new String[2];
a[0] = "Hello";
a[1] = "World";
ArrayList b = new ArrayList(a);
String[] c = (String[]) b.ToArray();

And I don't want to have to do this:

String[] a = new String[2];
a[0] = "Hello";
a[1] = "World";
ArrayList b = new ArrayList(a);
Object[] temp = b.ToArray();
String[] c = new String[temp.Length];
for(int i=0;i<temp.Length;i++)
{
    c[i] = (String) temp[i];
}

Is there an easy way to do this without using a temporary variable? Edit: This is in ASP.NET, by the way.

+4  A: 

Use LINQ:

String[] c = b.Cast<String>().ToArray();

May I ask why you're using ArrayList in the first place, instead of a generic collection type?

tzaman
A: 

You can do something like

myArray.Select(mySomething => new SomethingElse(mySomething)).ToArray() 

to cast it to anything you like :)

Diego Pereyra
+5  A: 

The best solution would be to use a List<string>.

ChaosPandion
...and welcome to a new world ;) It's seriously worth getting your head around generics.
spender
A: 

+1 for the generic Collections such as List<T>, -1 for ArrayList which is better be put on mothballs.

Marius Schulz