Files
mirror-processhacker/1.x/trunk/ProcessHacker.Common/Linq/Query Operators/Projection Operators.cs
T
wj32 7bd28e4357 moved branches, tags, trunk to 1.x branch
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@2304 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2009-10-25 02:22:46 +00:00

76 lines
2.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace System.Linq
{
public static partial class Enumerable
{
// Select
public static IEnumerable<TResult> Select<TSource, TResult> (this IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
if (source == null) throw new ArgumentNullException ("source");
if (selector == null) throw new ArgumentNullException ("selector");
foreach (TSource element in source)
yield return selector (element);
}
public static IEnumerable<TResult> Select<TSource, TResult> (this IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
if (source == null) throw new ArgumentNullException ("source");
if (selector == null) throw new ArgumentNullException ("selector");
int i = 0;
foreach (TSource element in source)
yield return selector (element, i++);
}
// SelectMany
public static IEnumerable<TResult> SelectMany<TSource, TResult> (
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TResult>> selector)
{
if (source == null) throw new ArgumentNullException ("source");
if (selector == null) throw new ArgumentNullException ("selector");
foreach (TSource element in source)
foreach (TResult childElement in selector (element))
yield return childElement;
}
public static IEnumerable<TResult> SelectMany<TSource, TResult> (
this IEnumerable<TSource> source,
Func<TSource, int, IEnumerable<TResult>> selector)
{
if (source == null) throw new ArgumentNullException ("source");
if (selector == null) throw new ArgumentNullException ("selector");
int i = 0;
foreach (TSource element in source)
{
foreach (TResult innerElement in selector (element, i))
yield return innerElement;
i++;
}
}
public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult> (
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TCollection>> collectionSelector,
Func<TSource, TCollection, TResult> resultSelector)
{
if (source == null) throw new ArgumentNullException ("source");
if (collectionSelector == null) throw new ArgumentNullException ("collectionSelector");
if (resultSelector == null) throw new ArgumentNullException ("resultSelector");
foreach (TSource element in source)
foreach (TCollection innerElement in collectionSelector (element))
yield return resultSelector (element, innerElement);
}
}
}