+2  A: 

First, I would change your ArrayList to a strongly typed generic list, List<CurvePoint>. Then, to get your Point array, you can perform this code.

Point[] Plots = _Data.Select(obj => (Point)obj).ToArray();

If you leave it as an ArrayList, you can still do it using this code:

Point[] Plots = (from CurvePoint obj in _Data select (Point)obj).ToArray();
// or
Point[] Plots = _Data.Cast<CurvePoint>().Select(obj => (Point)obj).ToArray();

Edit: Finally, if you're stuck with ArrayList and you do not have LINQ, you can do this the "long" way.

Point[] Plots = new Point[_Data.Count];
for (int i = 0; i < _Data.Count; i++)
{
    Plots[i] = (Point)(CurvePoint)_Data[i];
}
Anthony Pegram
Thanks, works well
HighFever
+1  A: 

The reason you can't do it is that your ArrayList contains points through references to object. Therefore there's no user-defined cast from object (even though it's a reference to CurvePoint, which does have the cast defined) to your Point type.

The following fix will do the trick (.NET 3.5+):

        Point[] Plots = _Data
            .OfType<CurvePoint>()
            .Select(cp => (Point)cp)
            .ToArray();
Grozz