@@ -94,7 +94,7 @@ public class WorkloadGroupPolicy : IEquatable<WorkloadGroupPolicy>
94
94
public RequestLimitsPolicy ? RequestLimitsPolicy { get ; set ; }
95
95
96
96
[ JsonProperty ( "RequestRateLimitPolicies" ) ]
97
- public List < RequestRateLimitPolicy > ? RequestRateLimitPolicies { get ; set ; }
97
+ public PolicyList < RequestRateLimitPolicy > ? RequestRateLimitPolicies { get ; set ; }
98
98
99
99
[ JsonProperty ( "RequestRateLimitsEnforcementPolicy" ) ]
100
100
public RequestRateLimitsEnforcementPolicy ? RequestRateLimitsEnforcementPolicy { get ; set ; }
@@ -107,9 +107,7 @@ public bool Equals(WorkloadGroupPolicy? other)
107
107
if ( other is null ) return false ;
108
108
if ( ReferenceEquals ( this , other ) ) return true ;
109
109
return EqualityComparer < RequestLimitsPolicy ? > . Default . Equals ( RequestLimitsPolicy , other . RequestLimitsPolicy ) &&
110
- ( RequestRateLimitPolicies == null && other . RequestRateLimitPolicies == null ||
111
- RequestRateLimitPolicies != null && other . RequestRateLimitPolicies != null &&
112
- RequestRateLimitPolicies . SequenceEqual ( other . RequestRateLimitPolicies ) ) &&
110
+ EqualityComparer < PolicyList < RequestRateLimitPolicy > ? > . Default . Equals ( RequestRateLimitPolicies , other . RequestRateLimitPolicies ) &&
113
111
EqualityComparer < RequestRateLimitsEnforcementPolicy ? > . Default . Equals ( RequestRateLimitsEnforcementPolicy , other . RequestRateLimitsEnforcementPolicy ) &&
114
112
EqualityComparer < QueryConsistencyPolicy ? > . Default . Equals ( QueryConsistencyPolicy , other . QueryConsistencyPolicy ) ;
115
113
}
@@ -120,15 +118,9 @@ public override int GetHashCode()
120
118
{
121
119
var hc = new HashCode ( ) ;
122
120
hc . Add ( RequestLimitsPolicy ) ;
121
+ hc . Add ( RequestRateLimitPolicies ) ;
123
122
hc . Add ( RequestRateLimitsEnforcementPolicy ) ;
124
123
hc . Add ( QueryConsistencyPolicy ) ;
125
- if ( RequestRateLimitPolicies != null )
126
- {
127
- foreach ( var policy in RequestRateLimitPolicies )
128
- {
129
- hc . Add ( policy ) ;
130
- }
131
- }
132
124
return hc . ToHashCode ( ) ;
133
125
}
134
126
@@ -397,4 +389,42 @@ public override string ToString()
397
389
} ) ;
398
390
}
399
391
}
392
+
393
+ public class PolicyList < T > : List < T > where T : IEquatable < T >
394
+ {
395
+ public override bool Equals ( object ? obj )
396
+ {
397
+ if ( obj is not List < T > other )
398
+ {
399
+ return false ;
400
+ }
401
+ if ( Count != other . Count )
402
+ {
403
+ return false ;
404
+ }
405
+ // Use HashSet for efficient, order-independent comparison
406
+ return new HashSet < T > ( this ) . SetEquals ( other ) ;
407
+ }
408
+
409
+ public override int GetHashCode ( )
410
+ {
411
+ int hashCode = 0 ;
412
+ // Order-independent hash code calculation
413
+ foreach ( T item in this . OrderBy ( i => i . GetHashCode ( ) ) )
414
+ {
415
+ // XORing hash codes is a common technique for order-independent hashing
416
+ hashCode ^= item . GetHashCode ( ) ;
417
+ }
418
+ return hashCode ;
419
+ }
420
+
421
+ public override string ToString ( )
422
+ {
423
+ return JsonConvert . SerializeObject ( this , new JsonSerializerSettings
424
+ {
425
+ NullValueHandling = NullValueHandling . Ignore ,
426
+ Formatting = Formatting . None
427
+ } ) ;
428
+ }
429
+ }
400
430
}
0 commit comments