diff options
Diffstat (limited to 'src/System.Web.Mvc/ExpressionUtil/ParameterExpressionFingerprint.cs')
-rw-r--r-- | src/System.Web.Mvc/ExpressionUtil/ParameterExpressionFingerprint.cs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/System.Web.Mvc/ExpressionUtil/ParameterExpressionFingerprint.cs b/src/System.Web.Mvc/ExpressionUtil/ParameterExpressionFingerprint.cs new file mode 100644 index 00000000..5799d064 --- /dev/null +++ b/src/System.Web.Mvc/ExpressionUtil/ParameterExpressionFingerprint.cs @@ -0,0 +1,37 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq.Expressions; + +#pragma warning disable 659 // overrides AddToHashCodeCombiner instead + +namespace System.Web.Mvc.ExpressionUtil +{ + // ParameterExpression fingerprint class + // Can represent the model parameter or an inner parameter in an open lambda expression + + [SuppressMessage("Microsoft.Usage", "CA2218:OverrideGetHashCodeOnOverridingEquals", Justification = "Overrides AddToHashCodeCombiner() instead.")] + internal sealed class ParameterExpressionFingerprint : ExpressionFingerprint + { + public ParameterExpressionFingerprint(ExpressionType nodeType, Type type, int parameterIndex) + : base(nodeType, type) + { + ParameterIndex = parameterIndex; + } + + // Parameter position within the overall expression, used to maintain alpha equivalence. + public int ParameterIndex { get; private set; } + + public override bool Equals(object obj) + { + ParameterExpressionFingerprint other = obj as ParameterExpressionFingerprint; + return (other != null) + && (this.ParameterIndex == other.ParameterIndex) + && this.Equals(other); + } + + internal override void AddToHashCodeCombiner(HashCodeCombiner combiner) + { + combiner.AddInt32(ParameterIndex); + base.AddToHashCodeCombiner(combiner); + } + } +} |