Actually, strictly speaking, all you need to use foreach is a public GetEnumerator() method that returns something with a bool MoveNext() method and a ? Current {get;} property. However, the most common meaning of this is "something that implements IEnumerable/IEnumerable, returning an IEnumerator/IEnumerator.
By implication, this includes anything that implements ICollection/ICollection, such as anything like Collection, List, arrays (T[]), etc. So any standard "collection of data" will generally support foreach.