if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate); if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate); if (source is List <TSource>) return new WhereListIterator<TSource>(( List <TSource>)source, predicate); * This source code was highlighted with Source Code Highlighter .
if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate); if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate); if (source is List <TSource>) return new WhereListIterator<TSource>(( List <TSource>)source, predicate); * This source code was highlighted with Source Code Highlighter .
if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate); if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate); if (source is List <TSource>) return new WhereListIterator<TSource>(( List <TSource>)source, predicate); * This source code was highlighted with Source Code Highlighter .
if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate); if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate); if (source is List <TSource>) return new WhereListIterator<TSource>(( List <TSource>)source, predicate); * This source code was highlighted with Source Code Highlighter .
if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate); if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate); if (source is List <TSource>) return new WhereListIterator<TSource>(( List <TSource>)source, predicate); * This source code was highlighted with Source Code Highlighter .
* This source code was highlighted with Source Code Highlighter .
- public static TSource LastOrDefault <TSource> ( this IEnumerable <TSource> source) {
- if (source == null ) throw Error.ArgumentNull ( "source" );
- IList <TSource> list = source as IList <TSource>;
- if (list! = null ) {
- int count = list.Count;
- if (count> 0) return list [count - 1];
- }
- else {
* This source code was highlighted with Source Code Highlighter .
- public static TSource Single <TSource> ( this IEnumerable <TSource> source) {
- if (source == null ) throw Error.ArgumentNull ( "source" );
- IList <TSource> list = source as IList <TSource>;
- if (list! = null ) {
- switch (list.Count) {
- case 0: throw Error. NoElements ();
- case 1: return list [0];
* This source code was highlighted with Source Code Highlighter .
- class Key
- {
- private readonly int _number;
- public static int HashCallsCount;
- public static int EqualsCallsCount;
- public Key ( int number)
- {
- _number = number;
- }
- public bool Equals (Key other)
- {
- if (ReferenceEquals ( null , other))
- {
- return false ;
- }
- if (ReferenceEquals ( this , other))
- {
- return true ;
- }
- return other._number == _number;
- }
- public override bool Equals ( object obj)
- {
- EqualsCallsCount ++;
- if (ReferenceEquals ( null , obj))
- {
- return false ;
- }
- if (ReferenceEquals ( this , obj))
- {
- return true ;
- }
- if (obj.GetType ()! = typeof (Key))
- {
- return false ;
- }
- return Equals ((Key) obj);
- }
- public override int GetHashCode ()
- {
- HashCallsCount ++;
- return _number;
- }
- }
- class Test
- {
- public int Number { get ; set ; }
- public string Name { get ; set ; }
- public key key
- {
- get { return new Key (Number);}
- }
- public override string ToString ()
- {
- return string .Format ( "Number: {0}, Name: {1}" , Number, Name);
- }
- }
- internal class Program
- {
- private static void Main ( string [] args)
- {
- var items = Enumerable.Range (1, 20) .Select (x => new Test {Number = x% 3});
- foreach ( var group in items.GroupBy (x => x.Key))
- {
- Console .WriteLine ( "Group key: {0}" , group.Key);
- foreach ( var item in group)
- {
- Console .WriteLine (item);
- }
- }
- Console .WriteLine ( "EqualsCallsCount {0}" , Key.EqualsCallsCount);
- Console .WriteLine ( "HashCallsCount {0}" , Key.HashCallsCount);
- }
- }
* This source code was highlighted with Source Code Highlighter .
- Lookup (IEqualityComparer <TKey> comparer) {
- if (comparer == null ) comparer = EqualityComparer <TKey> .Default;
- this .comparer = comparer;
- groupings = new Grouping [7];
- }
* This source code was highlighted with Source Code Highlighter .
- void Resize () {
- int newSize = checked (count * 2 + 1);
- Grouping [] newGroupings = new Grouping [newSize];
- Grouping g = lastGrouping;
- do {
- g = g.next;
- int index = g.hashCode% newSize;
- g.hashNext = newGroupings [index];
- newGroupings [index] = g;
- } while (g! = lastGrouping);
- groupings = newGroupings;
- }
* This source code was highlighted with Source Code Highlighter .
- private static IEnumerable <Test> SortTest (Func < IEnumerable <Test >> list)
- {
- foreach ( var item in list (). OrderBy (x => x.Number) .ThenBy (x => x.Name))
- {
- yield return item;
- }
- }
* This source code was highlighted with Source Code Highlighter .
- private static IEnumerable <Test> SortTest2 (Func < IEnumerable <Test >> list)
- {
- return list (). OrderBy (x => x.Number) .ThenBy (x => x.Name);
- }
Source: https://habr.com/ru/post/124231/
All Articles