static Option <TResult> ElementAt <TEnumerable, TEnumerator, TSource, TResult, TSelector>(this TEnumerable source, int index, TSelector selector) where TEnumerable : IValueReadOnlyCollection <TSource, TEnumerator> where TEnumerator : struct, IEnumerator <TSource> where TSelector : struct, IFunction <TSource, TResult> => index < source.Count ? ValueEnumerableExtensions.ElementAt <TEnumerable, TEnumerator, TSource, TResult, TSelector>(source, index, selector) : Option.None;
public static Option <TSource> ElementAt <TSource>(this ImmutableStack <TSource> source, int index) => ValueEnumerableExtensions.ElementAt <ValueWrapper <TSource>, ValueWrapper <TSource> .Enumerator, TSource>(new ValueWrapper <TSource>(source), index);
public static Option <TSource> ElementAt <TEnumerable, TEnumerator, TSource>(this TEnumerable source, int index) where TEnumerable : IValueReadOnlyCollection <TSource, TEnumerator> where TEnumerator : struct, IEnumerator <TSource> => index < source.Count ? ValueEnumerableExtensions.ElementAt <TEnumerable, TEnumerator, TSource>(source, index) : Option.None;