I want to have a convenience wrapper B that inherits from A<c
foreach loop does not use IEnumerable or IEnumerable implementation. You can use foreach even if your class doesn't implement any of them. The only thing it needs is GetEnumerator method that returns IEnumerator implementation.
Check this question: How is foreach implemented in C#?
That's why your class works with foreach and doesn't with ToArray().