Xamarin Public Jenkins (auto-signing) e79aa3c0ed Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
2016-08-03 10:59:49 +00:00

48 lines
1.8 KiB
C#

namespace System.Web.UI.WebControls {
using System.Collections;
using System.Collections.Generic;
internal class LinqDataSourceHelper {
public static bool EnumerableContentEquals(IEnumerable enumerableA, IEnumerable enumerableB) {
IEnumerator enumeratorA = enumerableA.GetEnumerator();
IEnumerator enumeratorB = enumerableB.GetEnumerator();
while (enumeratorA.MoveNext()) {
if (!enumeratorB.MoveNext())
return false;
object itemA = enumeratorA.Current;
object itemB = enumeratorB.Current;
if (itemA == null) {
if (itemB != null)
return false;
}
else if (!itemA.Equals(itemB))
return false;
}
if (enumeratorB.MoveNext())
return false;
return true;
}
public static Type FindGenericEnumerableType(Type type) {
// Logic taken from Queryable.AsQueryable which accounts for Array types which are not
// generic but implement the generic IEnumerable interface.
while ((type != null) && (type != typeof(object)) && (type != typeof(string))) {
if (type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(IEnumerable<>))) {
return type;
}
foreach (Type interfaceType in type.GetInterfaces()) {
Type genericInterface = FindGenericEnumerableType(interfaceType);
if (genericInterface != null) {
return genericInterface;
}
}
type = type.BaseType;
}
return null;
}
}
}