From what you have there, looping would be the only way.
I'd be pretty annoyed at the developer of the class though. There are conventions in .NET that are backed up by well known interfaces; ICollection, ICollection<T>, IList, IList<T> being particularly apt.
While arrays and string's use of Length is a near-exception, the only reason I can think of for calling GetSize, "GetSize" (or indeed, for calling a property anything in the form "GetXXX") is if I knew the person who would be using the class, and I really disliked them. Not implementing ICollection<float> is a bit more likely to be justifiable, but it still is something to justify with a good reason, rather than just not bothering.
Since most classes of this nature would implement ICollection<float>, in most cases where this comes up you'd be able to do:
float[] arr = new float[indexer.Count];
indexer.CopyTo(arr, 0);
But most bizarre still is the fact that it doesn't even implement IEnumerable<float>. That's really, really weird. It's such a core part of .NET ways of doing things, that unless there's a really good reason, it's bordering on being a bug-of-omission. If it had, then you could have just done index.ToArray().
If I had to work with this object much, I'd probably write a wrapper class or at least a set of extension methods to fill in the gaps.
IEnumerable, afloat[] getDatamethod, anything? I'm assuming no since you're trying this, but that would be the simplest manner. If it doesn't, are there any other methods that could help?i++, whereiis aprivate intfield).