Compare two IEnumerable
///////////////////////////////////////////////////////////////////////////////
/* Code Usage: This code is referenced from
* http://blog.slaven.net.au/archives/2008/03/16/comparing-two-arrays-or-ienumerables-in-c/
*/
///////////////////////////////////////////////////////////////////////////////
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace ComputationalGeometry.DataStructures
{
public static class CollectionUtility
{
public static bool IsEqualTo<TSource>(this IEnumerable<TSource> value, IEnumerable<TSource> compareList, IEqualityComparer<TSource> comparer)
{
if (value == compareList)
{
return true;
}
if (value == null || compareList == null)
{
return false;
}
if (comparer == null)
{
comparer = EqualityComparer<TSource>.Default;
}
IEnumerator<TSource> enumerator1 = value.GetEnumerator();
IEnumerator<TSource> enumerator2 = compareList.GetEnumerator();
bool enum1HasValue = enumerator1.MoveNext();
bool enum2HasValue = enumerator2.MoveNext();
try
{
while (enum1HasValue && enum2HasValue)
{
if (!comparer.Equals(enumerator1.Current, enumerator2.Current))
{
return false;
}
enum1HasValue = enumerator1.MoveNext();
enum2HasValue = enumerator2.MoveNext();
}
return !(enum1HasValue || enum2HasValue);
}
finally
{
enumerator1.Dispose();
enumerator2.Dispose();
}
}
public static bool IsEqualTo<TSource>(this IEnumerable<TSource> value, IEnumerable<TSource> compareList)
{
return IsEqualTo(value, compareList, null);
}
public static bool IsEqualTo(this IEnumerable value, IEnumerable compareList)
{
return IsEqualTo<object>(value.OfType<object>(), compareList.OfType<object>());
}
}
}
Related examples in the same category