diff --git a/src/Polly/Policy.HandleSyntax.cs b/src/Polly/Policy.HandleSyntax.cs index 0ece8b1627..bd1b6ebc4d 100644 --- a/src/Polly/Policy.HandleSyntax.cs +++ b/src/Polly/Policy.HandleSyntax.cs @@ -61,7 +61,7 @@ public static PolicyBuilder HandleInner(Func excep /// This policy filter matches the value returned using .Equals(), ideally suited for value types such as int and enum. To match characteristics of class return types, consider the overload taking a result predicate. /// The PolicyBuilder instance. public static PolicyBuilder HandleResult(TResult result) => - HandleResult(new Func(r => (r != null && r.Equals(result)) || (r == null && result == null))); + HandleResult(new Func(r => (!Equals(r, default(TResult)) && r.Equals(result)) || (Equals(r, default(TResult)) && Equals(result, default(TResult))))); } public partial class Policy @@ -123,5 +123,5 @@ public static PolicyBuilder HandleInner(FuncThis policy filter matches the value returned using .Equals(), ideally suited for value types such as int and enum. To match characteristics of class return types, consider the overload taking a result predicate. /// The PolicyBuilder instance. public static PolicyBuilder HandleResult(TResult result) => - HandleResult(r => (r != null && r.Equals(result)) || (r == null && result == null)); + HandleResult(r => (!Equals(r, default(TResult)) && r.Equals(result)) || (Equals(r, default(TResult)) && Equals(result, default(TResult)))); } diff --git a/src/Polly/PolicyBuilder.OrSyntax.cs b/src/Polly/PolicyBuilder.OrSyntax.cs index 43e5ab1292..27ce21e8cd 100644 --- a/src/Polly/PolicyBuilder.OrSyntax.cs +++ b/src/Polly/PolicyBuilder.OrSyntax.cs @@ -102,7 +102,7 @@ private static Exception HandleInnerNested(Func predicate, Exce /// This policy filter matches the value returned using .Equals(), ideally suited for value types such as int and enum. To match characteristics of class return types, consider the overload taking a result predicate. /// The PolicyBuilder instance. public PolicyBuilder OrResult(TResult result) => - OrResult(r => (r != null && r.Equals(result)) || (r == null && result == null)); + OrResult(r => (!Equals(r, default(TResult)) && r.Equals(result)) || (Equals(r, default(TResult)) && Equals(result, default(TResult)))); #endregion } @@ -130,7 +130,7 @@ public PolicyBuilder OrResult(Func resultPredicate) /// This policy filter matches the value returned using .Equals(), ideally suited for value types such as int and enum. To match characteristics of class return types, consider the overload taking a result predicate. /// The PolicyBuilder instance. public PolicyBuilder OrResult(TResult result) => - OrResult(r => (r != null && r.Equals(result)) || (r == null && result == null)); + OrResult(r => (!Equals(r, default(TResult)) && r.Equals(result)) || (Equals(r, default(TResult)) && Equals(result, default(TResult)))); #endregion diff --git a/src/Polly/Polly.csproj b/src/Polly/Polly.csproj index 967d93bde1..e128b592ed 100644 --- a/src/Polly/Polly.csproj +++ b/src/Polly/Polly.csproj @@ -7,12 +7,12 @@ Library 70 true - $(NoWarn);IDE0011;S103;S3872;SA1402;SA1414;S3215;S2955 + $(NoWarn);IDE0011;S103;S3872;SA1402;SA1414;S3215 $(NoWarn);IDE1006;CA1062;S107;CA1068;S4039;CA1000;CA1063;CA1031;CA1051 $(NoWarn);CA2211;S2223;CA1032;CA1815;CA1816;S4457;SA1615;SA1618;CA1033 - $(NoWarn);S4023;CA1010;S3442;S3880;CA1064;SA1649;SA1625;SA1623;SA1118 + $(NoWarn);S4023;CA1010;S3442;CA1064;SA1649;SA1625;SA1623;SA1118 $(NoWarn);S3253;S3971;S6605;CA1724;CA1716;SA1108;CA1710;S4049;S3246 - $(NoWarn);CA1805;CA1821 + $(NoWarn);CA1805 $(NoWarn);RS0037; diff --git a/src/Polly/Utilities/TimedLock.cs b/src/Polly/Utilities/TimedLock.cs index 6c97b9dce0..901135c8af 100644 --- a/src/Polly/Utilities/TimedLock.cs +++ b/src/Polly/Utilities/TimedLock.cs @@ -68,15 +68,15 @@ public void Dispose() // in order to detect when the object is not freed.) private class Sentinel { +#if NETSTANDARD2_0 ~Sentinel() { // If this finalizer runs, someone somewhere failed to // call Dispose, which means we've failed to leave // a monitor! -#if NETSTANDARD2_0 System.Diagnostics.Debug.Fail("Undisposed lock"); -#endif } +#endif } private readonly Sentinel _leakDetector;