-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathEnumerableConverter.cs
33 lines (30 loc) · 1.14 KB
/
EnumerableConverter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections;
using System.Collections.Generic;
namespace DotNetTransformer.Collections {
public sealed class EnumerableConverter<TIn, TOut> : IEnumerable<TOut>
{
private IEnumerable<TIn> _collection;
private Converter<TIn, TOut> _converter;
private Predicate<TIn> _match;
public EnumerableConverter(IEnumerable<TIn> collection, Converter<TIn, TOut> converter) : this(collection, converter, e => true) { }
public EnumerableConverter(IEnumerable<TIn> collection, Converter<TIn, TOut> converter, Predicate<TIn> match) {
if(ReferenceEquals(collection, null)) throw new ArgumentNullException("collection");
if(ReferenceEquals(converter, null)) throw new ArgumentNullException("converter");
if(ReferenceEquals(match, null)) throw new ArgumentNullException("match");
_collection = collection;
_converter = converter;
_match = match;
}
public IEnumerator<TOut> GetEnumerator() {
IEnumerator<TIn> e = _collection.GetEnumerator();
while(e.MoveNext()) {
if(_match(e.Current))
yield return _converter(e.Current);
}
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
}
}