diff --git a/README.markdown b/README.markdown
index 69b1b9de1..577961acd 100644
--- a/README.markdown
+++ b/README.markdown
@@ -1,9 +1,6 @@
-# RestSharp .NET 2.0 Fork - Simple .NET REST Client
+# RestSharp .NET 4.8 Fork - Simple .NET REST Client
-This is a fork of RestSharp for ,NET 2.0.
-
-To get it to work correctly we have included System.Xml.Linq from Mono project, and LinqBridge.cs,
-so you may run into conflicts should you have other .NET2 projects that have done the same
+This is a fork of RestSharp targeting .NET Framework 4.8.
### [Official Site/Blog][1] - [@RestSharp][2]
### Please use the [Google Group][3] for feature requests and troubleshooting usage.
@@ -11,7 +8,7 @@ so you may run into conflicts should you have other .NET2 projects that have don
### Features
-* Supports .NET 3.5+, Silverlight 4, Windows Phone 7, Mono, MonoTouch
+* Supports .NET 4.8, Silverlight 4, Windows Phone 7, Mono, MonoTouch
* Automatic XML and JSON deserialization
* Supports custom serialization and deserialization via ISerializer and IDeserializer
* Fuzzy element name matching ('product_id' in XML/JSON will match C# property named 'ProductId')
diff --git a/RestSharp.IntegrationTests/RestSharp.IntegrationTests.csproj b/RestSharp.IntegrationTests/RestSharp.IntegrationTests.csproj
index 3af6d3743..90829e909 100644
--- a/RestSharp.IntegrationTests/RestSharp.IntegrationTests.csproj
+++ b/RestSharp.IntegrationTests/RestSharp.IntegrationTests.csproj
@@ -10,7 +10,7 @@
Properties
RestSharp.IntegrationTests
RestSharp.IntegrationTests
- v4.0
+ v4.8
512
@@ -40,21 +40,25 @@
-
- 3.5
-
-
- 3.5
-
+
+
-
+
+ False
+ ..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll
+
+
+ False
+ ..\packages\xunit.assert.2.4.2\lib\netstandard1.1\xunit.assert.dll
+
+
False
- ..\packages\xunit.1.9.0.1566\lib\xunit.dll
+ ..\packages\xunit.extensibility.core.2.4.2\lib\net452\xunit.core.dll
-
+
False
- ..\packages\xunit.extensions.1.9.0.1566\lib\xunit.extensions.dll
+ ..\packages\xunit.extensibility.execution.2.4.2\lib\net452\xunit.execution.desktop.dll
diff --git a/RestSharp.IntegrationTests/packages.config b/RestSharp.IntegrationTests/packages.config
index d82739c0b..aa44a9325 100644
--- a/RestSharp.IntegrationTests/packages.config
+++ b/RestSharp.IntegrationTests/packages.config
@@ -1,5 +1,11 @@
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
diff --git a/RestSharp.Net2.sln b/RestSharp.Net2.sln
index 9ea2d812b..9660bcc77 100644
--- a/RestSharp.Net2.sln
+++ b/RestSharp.Net2.sln
@@ -1,6 +1,6 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestSharp", "RestSharp\RestSharp.csproj", "{2ECECFBF-5F3E-40EE-A963-72336DC7ABE2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{E709A928-A45C-4622-A35C-CCD8EE44CA80}"
diff --git a/RestSharp.Net2/LinqBridge-1.2.cs b/RestSharp.Net2/LinqBridge-1.2.cs
deleted file mode 100644
index 14c1aff68..000000000
--- a/RestSharp.Net2/LinqBridge-1.2.cs
+++ /dev/null
@@ -1,3103 +0,0 @@
-#region License, Terms and Author(s)
-//
-// LINQBridge
-// Copyright (c) 2007-9 Atif Aziz, Joseph Albahari. All rights reserved.
-//
-// Author(s):
-//
-// Atif Aziz, http://www.raboof.com
-//
-// This library is free software; you can redistribute it and/or modify it
-// under the terms of the New BSD License, a copy of which should have
-// been delivered along with this distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-#endregion
-
-// $Id: Enumerable.cs 240 2010-10-19 21:49:03Z azizatif $
-
-namespace System.Linq
-{
- #region Imports
-
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using LinqBridge;
-
- #endregion
-
- ///
- /// Provides a set of static (Shared in Visual Basic) methods for
- /// querying objects that implement .
- ///
-
- static partial class Enumerable
- {
- ///
- /// Returns the input typed as .
- ///
-
- public static IEnumerable AsEnumerable(IEnumerable source)
- {
- return source;
- }
-
- ///
- /// Returns an empty that has the
- /// specified type argument.
- ///
-
- public static IEnumerable Empty()
- {
- return Sequence.Empty;
- }
-
- ///
- /// Converts the elements of an to the
- /// specified type.
- ///
-
- public static IEnumerable Cast(
- this IEnumerable source)
- {
- CheckNotNull(source, "source");
-
- return CastYield(source);
- }
-
- private static IEnumerable CastYield(
- IEnumerable source)
- {
- foreach (var item in source)
- yield return (TResult)item;
- }
-
- ///
- /// Filters the elements of an based on a specified type.
- ///
-
- public static IEnumerable OfType(
- this IEnumerable source)
- {
- CheckNotNull(source, "source");
-
- return OfTypeYield(source);
- }
-
- private static IEnumerable OfTypeYield(
- IEnumerable source)
- {
- foreach (var item in source)
- if (item is TResult)
- yield return (TResult)item;
- }
-
- ///
- /// Generates a sequence of integral numbers within a specified range.
- ///
- /// The value of the first integer in the sequence.
- /// The number of sequential integers to generate.
-
- public static IEnumerable Range(int start, int count)
- {
- if (count < 0)
- throw new ArgumentOutOfRangeException("count", count, null);
-
- var end = (long)start + count;
- if (end - 1 >= int.MaxValue)
- throw new ArgumentOutOfRangeException("count", count, null);
-
- return RangeYield(start, end);
- }
-
- private static IEnumerable RangeYield(int start, long end)
- {
- for (var i = start; i < end; i++)
- yield return i;
- }
-
- ///
- /// Generates a sequence that contains one repeated value.
- ///
-
- public static IEnumerable Repeat(TResult element, int count)
- {
- if (count < 0) throw new ArgumentOutOfRangeException("count", count, null);
-
- return RepeatYield(element, count);
- }
-
- private static IEnumerable RepeatYield(TResult element, int count)
- {
- for (var i = 0; i < count; i++)
- yield return element;
- }
-
- ///
- /// Filters a sequence of values based on a predicate.
- ///
-
- public static IEnumerable Where(
- this IEnumerable source,
- Func predicate)
- {
- CheckNotNull(predicate, "predicate");
-
- return source.Where((item, i) => predicate(item));
- }
-
- ///
- /// Filters a sequence of values based on a predicate.
- /// Each element's index is used in the logic of the predicate function.
- ///
-
- public static IEnumerable Where(
- this IEnumerable source,
- Func predicate)
- {
- CheckNotNull(source, "source");
- CheckNotNull(predicate, "predicate");
-
- return WhereYield(source, predicate);
- }
-
- private static IEnumerable WhereYield(
- IEnumerable source,
- Func predicate)
- {
- var i = 0;
- foreach (var item in source)
- if (predicate(item, i++))
- yield return item;
- }
-
- ///
- /// Projects each element of a sequence into a new form.
- ///
-
- public static IEnumerable Select(
- this IEnumerable source,
- Func selector)
- {
- CheckNotNull(selector, "selector");
-
- return source.Select((item, i) => selector(item));
- }
-
- ///
- /// Projects each element of a sequence into a new form by
- /// incorporating the element's index.
- ///
-
- public static IEnumerable Select(
- this IEnumerable source,
- Func selector)
- {
- CheckNotNull(source, "source");
- CheckNotNull(selector, "selector");
-
- return SelectYield(source, selector);
- }
-
- private static IEnumerable SelectYield(
- IEnumerable source,
- Func selector)
- {
- var i = 0;
- foreach (var item in source)
- yield return selector(item, i++);
- }
-
- ///
- /// Projects each element of a sequence to an
- /// and flattens the resulting sequences into one sequence.
- ///
-
- public static IEnumerable SelectMany(
- this IEnumerable source,
- Func> selector)
- {
- CheckNotNull(selector, "selector");
-
- return source.SelectMany((item, i) => selector(item));
- }
-
- ///
- /// Projects each element of a sequence to an ,
- /// and flattens the resulting sequences into one sequence. The
- /// index of each source element is used in the projected form of
- /// that element.
- ///
-
- public static IEnumerable SelectMany(
- this IEnumerable source,
- Func> selector)
- {
- CheckNotNull(selector, "selector");
-
- return source.SelectMany(selector, (item, subitem) => subitem);
- }
-
- ///
- /// Projects each element of a sequence to an ,
- /// flattens the resulting sequences into one sequence, and invokes
- /// a result selector function on each element therein.
- ///
-
- public static IEnumerable SelectMany(
- this IEnumerable source,
- Func> collectionSelector,
- Func resultSelector)
- {
- CheckNotNull(collectionSelector, "collectionSelector");
-
- return source.SelectMany((item, i) => collectionSelector(item), resultSelector);
- }
-
- ///
- /// Projects each element of a sequence to an ,
- /// flattens the resulting sequences into one sequence, and invokes
- /// a result selector function on each element therein. The index of
- /// each source element is used in the intermediate projected form
- /// of that element.
- ///
-
- public static IEnumerable SelectMany(
- this IEnumerable source,
- Func> collectionSelector,
- Func resultSelector)
- {
- CheckNotNull(source, "source");
- CheckNotNull(collectionSelector, "collectionSelector");
- CheckNotNull(resultSelector, "resultSelector");
-
- return SelectManyYield(source, collectionSelector, resultSelector);
- }
-
- private static IEnumerable SelectManyYield(
- this IEnumerable source,
- Func> collectionSelector,
- Func resultSelector)
- {
- var i = 0;
- foreach (var item in source)
- foreach (var subitem in collectionSelector(item, i++))
- yield return resultSelector(item, subitem);
- }
-
- ///
- /// Returns elements from a sequence as long as a specified condition is true.
- ///
-
- public static IEnumerable TakeWhile(
- this IEnumerable source,
- Func predicate)
- {
- CheckNotNull(predicate, "predicate");
-
- return source.TakeWhile((item, i) => predicate(item));
- }
-
- ///
- /// Returns elements from a sequence as long as a specified condition is true.
- /// The element's index is used in the logic of the predicate function.
- ///
-
- public static IEnumerable TakeWhile(
- this IEnumerable source,
- Func predicate)
- {
- CheckNotNull(source, "source");
- CheckNotNull(predicate, "predicate");
-
- return TakeWhileYield(source, predicate);
- }
-
- private static IEnumerable TakeWhileYield(
- this IEnumerable source,
- Func predicate)
- {
- var i = 0;
- foreach (var item in source)
- if (predicate(item, i++))
- yield return item;
- else
- break;
- }
-
- private static class Futures
- {
- public static readonly Func Default = () => default(T);
- public static readonly Func Undefined = () => { throw new InvalidOperationException(); };
- }
-
- ///
- /// Base implementation of First operator.
- ///
-
- private static TSource FirstImpl(
- this IEnumerable source,
- Func empty)
- {
- CheckNotNull(source, "source");
- Debug.Assert(empty != null);
-
- var list = source as IList; // optimized case for lists
- if (list != null)
- return list.Count > 0 ? list[0] : empty();
-
- using (var e = source.GetEnumerator()) // fallback for enumeration
- return e.MoveNext() ? e.Current : empty();
- }
-
- ///
- /// Returns the first element of a sequence.
- ///
-
- public static TSource First(
- this IEnumerable source)
- {
- return source.FirstImpl(Futures.Undefined);
- }
-
- ///
- /// Returns the first element in a sequence that satisfies a specified condition.
- ///
-
- public static TSource First(
- this IEnumerable source,
- Func predicate)
- {
- return First(source.Where(predicate));
- }
-
- ///
- /// Returns the first element of a sequence, or a default value if
- /// the sequence contains no elements.
- ///
-
- public static TSource FirstOrDefault(
- this IEnumerable source)
- {
- return source.FirstImpl(Futures.Default);
- }
-
- ///
- /// Returns the first element of the sequence that satisfies a
- /// condition or a default value if no such element is found.
- ///
-
- public static TSource FirstOrDefault(
- this IEnumerable source,
- Func predicate)
- {
- return FirstOrDefault(source.Where(predicate));
- }
-
- ///
- /// Base implementation of Last operator.
- ///
-
- private static TSource LastImpl(
- this IEnumerable source,
- Func empty)
- {
- CheckNotNull(source, "source");
-
- var list = source as IList; // optimized case for lists
- if (list != null)
- return list.Count > 0 ? list[list.Count - 1] : empty();
-
- using (var e = source.GetEnumerator())
- {
- if (!e.MoveNext())
- return empty();
-
- var last = e.Current;
- while (e.MoveNext())
- last = e.Current;
-
- return last;
- }
- }
-
- ///
- /// Returns the last element of a sequence.
- ///
- public static TSource Last(
- this IEnumerable source)
- {
- return source.LastImpl(Futures.Undefined);
- }
-
- ///
- /// Returns the last element of a sequence that satisfies a
- /// specified condition.
- ///
-
- public static TSource Last(
- this IEnumerable source,
- Func predicate)
- {
- return Last(source.Where(predicate));
- }
-
- ///
- /// Returns the last element of a sequence, or a default value if
- /// the sequence contains no elements.
- ///
-
- public static TSource LastOrDefault(
- this IEnumerable source)
- {
- return source.LastImpl(Futures.Default);
- }
-
- ///
- /// Returns the last element of a sequence that satisfies a
- /// condition or a default value if no such element is found.
- ///
-
- public static TSource LastOrDefault(
- this IEnumerable source,
- Func predicate)
- {
- return LastOrDefault(source.Where(predicate));
- }
-
- ///
- /// Base implementation of Single operator.
- ///
-
- private static TSource SingleImpl(
- this IEnumerable source,
- Func empty)
- {
- CheckNotNull(source, "source");
-
- using (var e = source.GetEnumerator())
- {
- if (e.MoveNext())
- {
- var single = e.Current;
- if (!e.MoveNext())
- return single;
-
- throw new InvalidOperationException();
- }
-
- return empty();
- }
- }
-
- ///
- /// Returns the only element of a sequence, and throws an exception
- /// if there is not exactly one element in the sequence.
- ///
-
- public static TSource Single(
- this IEnumerable source)
- {
- return source.SingleImpl(Futures.Undefined);
- }
-
- ///
- /// Returns the only element of a sequence that satisfies a
- /// specified condition, and throws an exception if more than one
- /// such element exists.
- ///
-
- public static TSource Single(
- this IEnumerable source,
- Func predicate)
- {
- return Single(source.Where(predicate));
- }
-
- ///
- /// Returns the only element of a sequence, or a default value if
- /// the sequence is empty; this method throws an exception if there
- /// is more than one element in the sequence.
- ///
-
- public static TSource SingleOrDefault(
- this IEnumerable source)
- {
- return source.SingleImpl(Futures.Default);
- }
-
- ///
- /// Returns the only element of a sequence that satisfies a
- /// specified condition or a default value if no such element
- /// exists; this method throws an exception if more than one element
- /// satisfies the condition.
- ///
-
- public static TSource SingleOrDefault(
- this IEnumerable source,
- Func predicate)
- {
- return SingleOrDefault(source.Where(predicate));
- }
-
- ///
- /// Returns the element at a specified index in a sequence.
- ///
-
- public static TSource ElementAt(
- this IEnumerable source,
- int index)
- {
- CheckNotNull(source, "source");
-
- if (index < 0)
- throw new ArgumentOutOfRangeException("index", index, null);
-
- var list = source as IList;
- if (list != null)
- return list[index];
-
- try
- {
- return source.SkipWhile((item, i) => i < index).First();
- }
- catch (InvalidOperationException) // if thrown by First
- {
- throw new ArgumentOutOfRangeException("index", index, null);
- }
- }
-
- ///
- /// Returns the element at a specified index in a sequence or a
- /// default value if the index is out of range.
- ///
-
- public static TSource ElementAtOrDefault(
- this IEnumerable source,
- int index)
- {
- CheckNotNull(source, "source");
-
- if (index < 0)
- return default(TSource);
-
- var list = source as IList;
- if (list != null)
- return index < list.Count ? list[index] : default(TSource);
-
- return source.SkipWhile((item, i) => i < index).FirstOrDefault();
- }
-
- ///
- /// Inverts the order of the elements in a sequence.
- ///
-
- public static IEnumerable Reverse(
- this IEnumerable source)
- {
- CheckNotNull(source, "source");
-
- return ReverseYield(source);
- }
-
- private static IEnumerable ReverseYield(IEnumerable source)
- {
- var stack = new Stack();
- foreach (var item in source)
- stack.Push(item);
-
- foreach (var item in stack)
- yield return item;
- }
-
- ///
- /// Returns a specified number of contiguous elements from the start
- /// of a sequence.
- ///
-
- public static IEnumerable Take(
- this IEnumerable source,
- int count)
- {
- return source.Where((item, i) => i < count);
- }
-
- ///
- /// Bypasses a specified number of elements in a sequence and then
- /// returns the remaining elements.
- ///
-
- public static IEnumerable Skip(
- this IEnumerable source,
- int count)
- {
- return source.Where((item, i) => i >= count);
- }
-
- ///
- /// Bypasses elements in a sequence as long as a specified condition
- /// is true and then returns the remaining elements.
- ///
-
- public static IEnumerable SkipWhile(
- this IEnumerable source,
- Func predicate)
- {
- CheckNotNull(predicate, "predicate");
-
- return source.SkipWhile((item, i) => predicate(item));
- }
-
- ///
- /// Bypasses elements in a sequence as long as a specified condition
- /// is true and then returns the remaining elements. The element's
- /// index is used in the logic of the predicate function.
- ///
-
- public static IEnumerable SkipWhile(
- this IEnumerable source,
- Func predicate)
- {
- CheckNotNull(source, "source");
- CheckNotNull(predicate, "predicate");
-
- return SkipWhileYield(source, predicate);
- }
-
- private static IEnumerable SkipWhileYield(
- IEnumerable source,
- Func predicate)
- {
- using (var e = source.GetEnumerator())
- {
- for (var i = 0; ; i++)
- {
- if (!e.MoveNext())
- yield break;
-
- if (!predicate(e.Current, i))
- break;
- }
-
- do { yield return e.Current; } while (e.MoveNext());
- }
- }
-
- ///
- /// Returns the number of elements in a sequence.
- ///
-
- public static int Count(
- this IEnumerable source)
- {
- CheckNotNull(source, "source");
-
- var collection = source as ICollection;
- return collection != null
- ? collection.Count
- : source.Aggregate(0, (count, item) => checked(count + 1));
- }
-
- ///
- /// Returns a number that represents how many elements in the
- /// specified sequence satisfy a condition.
- ///
-
- public static int Count(
- this IEnumerable source,
- Func predicate)
- {
- return Count(source.Where(predicate));
- }
-
- ///
- /// Returns an that represents the total number
- /// of elements in a sequence.
- ///
-
- public static long LongCount(
- this IEnumerable source)
- {
- CheckNotNull(source, "source");
-
- var array = source as Array;
- return array != null
- ? array.LongLength
- : source.Aggregate(0L, (count, item) => count + 1);
- }
-
- ///
- /// Returns an that represents how many elements
- /// in a sequence satisfy a condition.
- ///
-
- public static long LongCount(
- this IEnumerable source,
- Func predicate)
- {
- return LongCount(source.Where(predicate));
- }
-
- ///
- /// Concatenates two sequences.
- ///
-
- public static IEnumerable Concat(
- this IEnumerable first,
- IEnumerable second)
- {
- CheckNotNull(first, "first");
- CheckNotNull(second, "second");
-
- return ConcatYield(first, second);
- }
-
- private static IEnumerable ConcatYield(
- IEnumerable first,
- IEnumerable second)
- {
- foreach (var item in first)
- yield return item;
-
- foreach (var item in second)
- yield return item;
- }
-
- ///
- /// Creates a from an .
- ///
-
- public static List ToList(
- this IEnumerable source)
- {
- CheckNotNull(source, "source");
-
- return new List(source);
- }
-
- ///
- /// Creates an array from an .
- ///
-
- public static TSource[] ToArray(
- this IEnumerable source)
- {
- return source.ToList().ToArray();
- }
-
- ///
- /// Returns distinct elements from a sequence by using the default
- /// equality comparer to compare values.
- ///
-
- public static IEnumerable Distinct(
- this IEnumerable source)
- {
- return Distinct(source, /* comparer */ null);
- }
-
- ///
- /// Returns distinct elements from a sequence by using a specified
- /// to compare values.
- ///
-
- public static IEnumerable Distinct(
- this IEnumerable source,
- IEqualityComparer comparer)
- {
- CheckNotNull(source, "source");
-
- return DistinctYield(source, comparer);
- }
-
- private static IEnumerable DistinctYield(
- IEnumerable source,
- IEqualityComparer comparer)
- {
- var set = new Dictionary(comparer);
- var gotNull = false;
-
- foreach (var item in source)
- {
- if (item == null)
- {
- if (gotNull)
- continue;
- gotNull = true;
- }
- else
- {
- if (set.ContainsKey(item))
- continue;
- set.Add(item, null);
- }
-
- yield return item;
- }
- }
-
- ///
- /// Creates a from an
- /// according to a specified key
- /// selector function.
- ///
-
- public static ILookup ToLookup(
- this IEnumerable source,
- Func keySelector)
- {
- return ToLookup(source, keySelector, e => e, /* comparer */ null);
- }
-
- ///
- /// Creates a from an
- /// according to a specified key
- /// selector function and a key comparer.
- ///
-
- public static ILookup ToLookup(
- this IEnumerable source,
- Func keySelector,
- IEqualityComparer comparer)
- {
- return ToLookup(source, keySelector, e => e, comparer);
- }
-
- ///
- /// Creates a from an
- /// according to specified key
- /// and element selector functions.
- ///
-
- public static ILookup ToLookup(
- this IEnumerable source,
- Func keySelector,
- Func elementSelector)
- {
- return ToLookup(source, keySelector, elementSelector, /* comparer */ null);
- }
-
- ///
- /// Creates a from an
- /// according to a specified key
- /// selector function, a comparer and an element selector function.
- ///
-
- public static ILookup ToLookup(
- this IEnumerable source,
- Func keySelector,
- Func elementSelector,
- IEqualityComparer comparer)
- {
- CheckNotNull(source, "source");
- CheckNotNull(keySelector, "keySelector");
- CheckNotNull(elementSelector, "elementSelector");
-
- var lookup = new Lookup(comparer);
-
- foreach (var item in source)
- {
- var key = keySelector(item);
-
- var grouping = (Grouping)lookup.Find(key);
- if (grouping == null)
- {
- grouping = new Grouping(key);
- lookup.Add(grouping);
- }
-
- grouping.Add(elementSelector(item));
- }
-
- return lookup;
- }
-
- ///
- /// Groups the elements of a sequence according to a specified key
- /// selector function.
- ///
-
- public static IEnumerable> GroupBy(
- this IEnumerable source,
- Func keySelector)
- {
- return GroupBy(source, keySelector, /* comparer */ null);
- }
-
- ///
- /// Groups the elements of a sequence according to a specified key
- /// selector function and compares the keys by using a specified
- /// comparer.
- ///
-
- public static IEnumerable> GroupBy(
- this IEnumerable source,
- Func keySelector,
- IEqualityComparer comparer)
- {
- return GroupBy(source, keySelector, e => e, comparer);
- }
-
- ///
- /// Groups the elements of a sequence according to a specified key
- /// selector function and projects the elements for each group by
- /// using a specified function.
- ///
-
- public static IEnumerable> GroupBy(
- this IEnumerable source,
- Func keySelector,
- Func elementSelector)
- {
- return GroupBy(source, keySelector, elementSelector, /* comparer */ null);
- }
-
- ///
- /// Groups the elements of a sequence according to a specified key
- /// selector function and creates a result value from each group and
- /// its key.
- ///
-
- public static IEnumerable> GroupBy(
- this IEnumerable source,
- Func keySelector,
- Func elementSelector,
- IEqualityComparer comparer)
- {
- CheckNotNull(source, "source");
- CheckNotNull(keySelector, "keySelector");
- CheckNotNull(elementSelector, "elementSelector");
-
- return ToLookup(source, keySelector, elementSelector, comparer);
- }
-
- ///
- /// Groups the elements of a sequence according to a key selector
- /// function. The keys are compared by using a comparer and each
- /// group's elements are projected by using a specified function.
- ///
-
- public static IEnumerable GroupBy(
- this IEnumerable source,
- Func keySelector,
- Func, TResult> resultSelector)
- {
- return GroupBy(source, keySelector, resultSelector, /* comparer */ null);
- }
-
- ///
- /// Groups the elements of a sequence according to a specified key
- /// selector function and creates a result value from each group and
- /// its key. The elements of each group are projected by using a
- /// specified function.
- ///
-
- public static IEnumerable GroupBy(
- this IEnumerable source,
- Func keySelector,
- Func, TResult> resultSelector,
- IEqualityComparer comparer)
- {
- CheckNotNull(source, "source");
- CheckNotNull(keySelector, "keySelector");
- CheckNotNull(resultSelector, "resultSelector");
-
- return ToLookup(source, keySelector, comparer).Select(g => resultSelector(g.Key, g));
- }
-
- ///
- /// Groups the elements of a sequence according to a specified key
- /// selector function and creates a result value from each group and
- /// its key. The keys are compared by using a specified comparer.
- ///
-
- public static IEnumerable GroupBy