public static TSource?FirstOrNull <TEnumerable, TEnumerator, TSource>(this TEnumerable source) where TEnumerable : IReadOnlyCollection <TSource> where TEnumerator : IEnumerator <TSource> where TSource : struct { if (source == null) { ThrowHelper.ThrowArgumentNullException(nameof(source)); } if (source.Count == 0) { return(null); } using (var enumerator = Dynamic.GetEnumerator <TEnumerable, TEnumerator, TSource> .Invoke(source)) { enumerator.MoveNext(); return(enumerator.Current); } }
public static bool Contains <TEnumerable, TEnumerator, TSource>(this TEnumerable source, TSource value, IEqualityComparer <TSource> comparer = null) where TEnumerable : IValueReadOnlyList <TSource, TEnumerator> where TEnumerator : struct, IValueEnumerator <TSource> { if (source == null) { ThrowHelper.ThrowArgumentNullException(nameof(source)); } var count = source.Count(); if (count == 0) { return(false); } if (comparer is null) { for (var index = 0; index < count; index++) { if (EqualityComparer <TSource> .Default.Equals(source[index], value)) { return(true); } } } else { for (var index = 0; index < count; index++) { if (comparer.Equals(source[index], value)) { return(true); } } } return(false); }
public static bool Contains <TEnumerable, TEnumerator, TSource>(this TEnumerable source, TSource value, IEqualityComparer <TSource> comparer = null) where TEnumerable : IValueEnumerable <TSource, TEnumerator> where TEnumerator : struct, IValueEnumerator <TSource> { if (source == null) { ThrowHelper.ThrowArgumentNullException(nameof(source)); } if (comparer is null) { using (var enumerator = source.GetValueEnumerator()) { while (enumerator.TryMoveNext(out var current)) { if (EqualityComparer <TSource> .Default.Equals(current, value)) { return(true); } } } } else { using (var enumerator = source.GetValueEnumerator()) { while (enumerator.TryMoveNext(out var current)) { if (comparer.Equals(current, value)) { return(true); } } } } return(false); }
public static bool Any <TSource>(this Span <TSource> source, Func <TSource, bool> predicate) { if (predicate is null) { ThrowHelper.ThrowArgumentNullException(nameof(predicate)); } var length = source.Length; if (length == 0) { return(false); } for (var index = 0; index < length; index++) { if (predicate(source[index])) { return(true); } } return(false); }
public static TSource Single <TEnumerable, TEnumerator, TSource>(this TEnumerable source) where TEnumerable : IValueEnumerable <TSource, TEnumerator> where TEnumerator : struct, IValueEnumerator <TSource> { if (source == null) { ThrowHelper.ThrowArgumentNullException(nameof(source)); } using (var enumerator = source.GetValueEnumerator()) { if (!enumerator.TryMoveNext(out var first)) { ThrowHelper.ThrowEmptySequence <TSource>(); } if (enumerator.TryMoveNext()) { ThrowHelper.ThrowNotSingleSequence <TSource>(); } return(first); } }