﻿interface IEnumerable<T> System.Collections.IEnumerable System.Collections.Generic.IEnumerable 
	arrayitemtype T
	java Iterable

method IEnumerator<T> GetEnumerator()
	java =iterator
	python =__iter__
	js {!}[Symbol.iterator]()

method T First() throws Exception
	java Utils.firstIterable({!}, null)
method T Last() throws Exception
	java Utils.lastIterable({!}, null)
method T ElementAt(int) throws Exception
	java Utils.elementAtIterable({!}, {0}, null)

method T FirstOrDefault()
	java Utils.firstOrDefaultIterable({!}, {def(T)}, null)
method T LastOrDefault()
	java Utils.lastOrDefaultIterable({!}, {def(T)}, null)
method T ElementAtOrDefault(int)
	java Utils.elementAtOrDefaultIterable({!}, {0}, {def(T)})

method T FirstOrDefault(Predicate<T>)
	java Utils.firstOrDefaultIterable({!}, {def(T)}, {0})
method T LastOrDefault(Predicate<T>)
	java Utils.lastOrDefaultIterable({!}, {def(T)}, {0})

method List<T> ToList()
	java Utils.toArrayList({!})

method IEnumerable<T> Concat(IEnumerable<T>)
	java Utils.concatIterable({!}, {0})

method IEnumerable<T> Reverse()
	java Utils.reverseIterable({!}, null)

method int Count()
	java Utils.countIterable({!}, null)

method int Count(Predicate<T>)
	java Utils.countIterable({!}, {0})

method IEnumerable<T> Where(Predicate<T>)
	java Utils.whereIterable({!}, {0})

method bool Any()
	java Utils.anyIterable({!}, null)
method bool Any(Predicate<T>)
	java Utils.anyIterable({!}, {0})
method bool All()
	java Utils.allIterable({!}, null)
method bool All(Predicate<T>)
	java Utils.allIterable({!}, {0})

method IEnumerable<R> Select<R>(Func<T, R>)
	java Utils.selectIterable({!}, {0})


