public static IEnumerableAsync <TSelect> SelectOptional <TItem, TSelect>(this IEnumerableAsync <TItem> enumerable, Func <TItem, Func <TSelect, ISelectionResult <TSelect> >, Func <ISelectionResult <TSelect> >, ISelectionResult <TSelect> > selection) { return(enumerable.SelectOptional <TItem, TSelect, int, IEnumerableAsync <TSelect> >(1, (item, carryUpdated, next, skip) => selection(item, (selected) => next(selected, 1), () => skip(1)), (aggregation, carryUpdated) => aggregation)); }
public static TResult SelectOptionalIndexed <TItem, TSelect, TCarry, TResult>(this IEnumerableAsync <TItem> enumerable, TCarry carry, Func <TItem, TCarry, int, Func <TSelect, TCarry, ISelectionResult <TSelect> >, Func <TCarry, ISelectionResult <TSelect> >, ISelectionResult <TSelect> > selection, Func <IEnumerableAsync <TSelect>, TCarry, TResult> aggregation) { int index = 0; return(enumerable.SelectOptional(carry, (item, carryUpdated, next, skip) => selection(item, carryUpdated, index++, next, skip), aggregation)); }
public static TResult SelectOptional <TItem, TSelect, TCarry1, TCarry2, TResult>(this IEnumerableAsync <TItem> enumerable, TCarry1 carry1, TCarry2 carry2, Func <TItem, TCarry1, TCarry2, Func <TSelect, TCarry1, TCarry2, ISelectionResult <TSelect> >, Func <TCarry1, TCarry2, ISelectionResult <TSelect> >, ISelectionResult <TSelect> > selection, Func <IEnumerableAsync <TSelect>, TCarry1, TCarry2, TResult> aggregation) { return(enumerable.SelectOptional(carry1.PairWithValue(carry2), (item, carryUpdated, next, skip) => selection(item, carryUpdated.Key, carryUpdated.Value, (selected, carry1Updated, carry2Updated) => next(selected, carry1Updated.PairWithValue(carry2Updated)), (carry1Updated, carry2Updated) => skip(carry1Updated.PairWithValue(carry2Updated))), (IEnumerableAsync <TSelect> selectedItems, KeyValuePair <TCarry1, TCarry2> carryFinal) => aggregation(selectedItems, carryFinal.Key, carryFinal.Value))); }