@@ -1087,10 +1087,10 @@ function TEnumerableBase<T>.Concat(const second: IEnumerable<T>): IEnumerable<T>
10871087
10881088function TEnumerableBase <T>.Contains(const value : T): Boolean;
10891089var
1090- comparer: IEqualityComparer<T> ;
1090+ comparer: Pointer ;
10911091begin
1092- comparer := IEqualityComparer<T>( _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T) ));
1093- Result := IEnumerable<T>(this).Contains(value , comparer);
1092+ comparer := _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T));
1093+ Result := IEnumerable<T>(this).Contains(value , IEqualityComparer<T>( comparer) );
10941094end ;
10951095
10961096function TEnumerableBase <T>.Contains(const value : T;
@@ -1165,15 +1165,15 @@ function TEnumerableBase<T>.EqualsTo(const values: array of T): Boolean;
11651165 ExitFalse;
11661166var
11671167 enumerator: IEnumerator<T>;
1168- comparer: IEqualityComparer<T> ;
1168+ comparer: Pointer ;
11691169 i: Integer;
11701170 { $IFDEF RSP31615}
11711171 item: T;
11721172 { $ENDIF}
11731173begin
11741174 i := 0 ;
11751175 enumerator := IEnumerable<T>(this).GetEnumerator;
1176- comparer := IEqualityComparer<T>( _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T) ));
1176+ comparer := _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T));
11771177 while enumerator.MoveNext do
11781178 begin
11791179 { $IFDEF RSP31615}
@@ -1187,7 +1187,7 @@ function TEnumerableBase<T>.EqualsTo(const values: array of T): Boolean;
11871187 end
11881188 else
11891189 { $ENDIF}
1190- if (i > High(values)) or not comparer.Equals(enumerator.Current, values[i]) then
1190+ if (i > High(values)) or not IEqualityComparer<T>( comparer) .Equals(enumerator.Current, values[i]) then
11911191 goto ExitFalse;
11921192 Inc(i);
11931193 end ;
@@ -1198,13 +1198,13 @@ function TEnumerableBase<T>.EqualsTo(const values: array of T): Boolean;
11981198
11991199function TEnumerableBase <T>.EqualsTo(const values: IEnumerable<T>): Boolean;
12001200var
1201- comparer: IEqualityComparer<T> ;
1201+ comparer: Pointer ;
12021202begin
12031203 Result := IInterface(this) = values;
12041204 if not Result then
12051205 begin
1206- comparer := IEqualityComparer<T>( _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T) ));
1207- Result := IEnumerable<T>(this).EqualsTo(values, comparer);
1206+ comparer := _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T));
1207+ Result := IEnumerable<T>(this).EqualsTo(values, IEqualityComparer<T>( comparer) );
12081208 end ;
12091209end ;
12101210
@@ -3844,14 +3844,14 @@ function TArrayIterator<T>.IndexOf(const item: T; index: Integer): Integer;
38443844
38453845function TArrayIterator <T>.IndexOf(const item: T; index, count: Integer): Integer;
38463846var
3847- comparer: IEqualityComparer<T> ;
3847+ comparer: Pointer ;
38483848 i: Integer;
38493849begin
38503850 CheckRange(index, count, fCount);
38513851
3852- comparer := IEqualityComparer<T>( _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T) ));
3852+ comparer := _LookupVtableInfo(giEqualityComparer, GetElementType, SizeOf(T));
38533853 for i := index to index + count - 1 do
3854- if comparer.Equals(fItems[i], item) then
3854+ if IEqualityComparer<T>( comparer) .Equals(fItems[i], item) then
38553855 Exit(i);
38563856 Result := -1 ;
38573857end ;
0 commit comments