One thing that works and is reasonably straight-forward is using Linq:
A[] a = new A[5];//initialize elements
B[] b = a.Select(anA => (B)anA).ToArray();
However using Linq's Cast<> method does NOT work: (see why)
B[] b2 = a.Cast<B>.ToArray();//throws InvalidCastException
Update: here's one that doesn't use Linq:
B[] b = Array.ConvertAll(a, elem => (B) elem);
This could work in pre-lambda .NET 2.0 using a more verbose approach:
B[] b = Array.ConvertAll(a,
new Converter<A, B>(delegate(A elem) { return (B) elem; }));
...and possibly using the shorter version:
B[] b = Array.ConvertAll(a, delegate(A elem) { return (B) elem; });