@@ -179,7 +179,7 @@ public static int CountTrue(bool[] array)
179
179
180
180
public static bool ArrayEquals < T > ( T [ ] a , T [ ] b )
181
181
{
182
- return ArrayComparer < T > . DefaultWithoutComparer . Equals ( a , b ) ;
182
+ return ArrayComparer < T > . Default . Equals ( a , b ) ;
183
183
}
184
184
185
185
public static bool ArrayEquals ( byte [ ] a , byte [ ] b )
@@ -197,21 +197,20 @@ public static bool ArrayEquals(byte[] a, byte[] b)
197
197
/// <returns></returns>
198
198
public static int ArrayGetHashCode < T > ( T [ ] array )
199
199
{
200
- return ArrayComparer < T > . DefaultWithoutComparer . GetHashCode ( array ) ;
200
+ return ArrayComparer < T > . Default . GetHashCode ( array ) ;
201
201
}
202
202
203
203
internal class ArrayComparer < T > : IEqualityComparer < T [ ] >
204
204
{
205
205
private readonly IEqualityComparer < T > _elementComparer ;
206
206
207
207
internal static ArrayComparer < T > Default { get ; } = new ArrayComparer < T > ( ) ;
208
- internal static ArrayComparer < T > DefaultWithoutComparer { get ; } = new ArrayComparer < T > ( null ) ;
209
208
210
209
internal ArrayComparer ( ) : this ( EqualityComparer < T > . Default ) { }
211
210
212
211
internal ArrayComparer ( IEqualityComparer < T > elementComparer )
213
212
{
214
- _elementComparer = elementComparer ;
213
+ _elementComparer = elementComparer ?? throw new ArgumentNullException ( nameof ( elementComparer ) ) ;
215
214
}
216
215
217
216
public bool Equals ( T [ ] a , T [ ] b )
@@ -225,21 +224,10 @@ public bool Equals(T[] a, T[] b)
225
224
if ( a . Length != b . Length )
226
225
return false ;
227
226
228
- if ( _elementComparer != null )
227
+ for ( var i = 0 ; i < a . Length ; i ++ )
229
228
{
230
- for ( var i = 0 ; i < a . Length ; i ++ )
231
- {
232
- if ( ! _elementComparer . Equals ( a [ i ] , b [ i ] ) )
233
- return false ;
234
- }
235
- }
236
- else
237
- {
238
- for ( var i = 0 ; i < a . Length ; i ++ )
239
- {
240
- if ( ! Equals ( a [ i ] , b [ i ] ) )
241
- return false ;
242
- }
229
+ if ( ! _elementComparer . Equals ( a [ i ] , b [ i ] ) )
230
+ return false ;
243
231
}
244
232
245
233
return true ;
@@ -252,16 +240,8 @@ public int GetHashCode(T[] array)
252
240
253
241
var hc = array . Length ;
254
242
255
- if ( _elementComparer != null )
256
- {
257
- foreach ( var e in array )
258
- hc = unchecked ( hc * 31 + _elementComparer . GetHashCode ( e ) ) ;
259
- }
260
- else
261
- {
262
- foreach ( var e in array )
263
- hc = unchecked ( hc * 31 + ( e ? . GetHashCode ( ) ?? 0 ) ) ;
264
- }
243
+ foreach ( var e in array )
244
+ hc = unchecked ( hc * 31 + _elementComparer . GetHashCode ( e ) ) ;
265
245
266
246
return hc ;
267
247
}
0 commit comments