public static TSource Single <TSource>(this IEnumerable <TSource> source) { if (source == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source); } if (source is IList <TSource> list) { switch (list.Count) { case 0: ThrowHelper.ThrowNoElementsException(); return(default); case 1: return(list[0]); } } else { using (IEnumerator <TSource> e = source.GetEnumerator()) { if (!e.MoveNext()) { ThrowHelper.ThrowNoElementsException(); } TSource result = e.Current; if (!e.MoveNext()) { return(result); } } } ThrowHelper.ThrowMoreThanOneElementException(); return(default);