diff --git a/Extensions/Xtensive.Orm.Security/Permission.cs b/Extensions/Xtensive.Orm.Security/Permission.cs
index 0766b62910..62edcbe321 100644
--- a/Extensions/Xtensive.Orm.Security/Permission.cs
+++ b/Extensions/Xtensive.Orm.Security/Permission.cs
@@ -56,16 +56,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- unchecked {
- int result = (Type != null ? Type.GetHashCode() : 0);
- result = (result*397) ^ CanRead.GetHashCode();
- result = (result*397) ^ CanWrite.GetHashCode();
- result = (result*397) ^ (Query != null ? Query.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Type, CanRead, CanWrite, Query);
#endregion
diff --git a/Orm/Xtensive.Orm.Tests.Core/Caching/CachePerformanceTest.cs b/Orm/Xtensive.Orm.Tests.Core/Caching/CachePerformanceTest.cs
index ffba35c3ef..854ad632d8 100644
--- a/Orm/Xtensive.Orm.Tests.Core/Caching/CachePerformanceTest.cs
+++ b/Orm/Xtensive.Orm.Tests.Core/Caching/CachePerformanceTest.cs
@@ -52,10 +52,7 @@ public override bool Equals(object obj)
return Equals(obj as Item);
}
- public override int GetHashCode()
- {
- return (Value!=null ? Value.GetHashCode() : 0);
- }
+ public override int GetHashCode() => Value?.GetHashCode() ?? 0;
public override string ToString()
{
@@ -174,4 +171,4 @@ private void FetchTest(int count)
}
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm.Tests.Core/Caching/WeakestCacheTest.cs b/Orm/Xtensive.Orm.Tests.Core/Caching/WeakestCacheTest.cs
index 28b7f48f9f..9617c47533 100644
--- a/Orm/Xtensive.Orm.Tests.Core/Caching/WeakestCacheTest.cs
+++ b/Orm/Xtensive.Orm.Tests.Core/Caching/WeakestCacheTest.cs
@@ -36,10 +36,7 @@ public override bool Equals(object obj)
return Equals(obj as Item);
}
- public override int GetHashCode()
- {
- return (Value != null ? Value.GetHashCode() : 0);
- }
+ public override int GetHashCode() => Value?.GetHashCode() ?? 0;
public override string ToString()
{
@@ -197,4 +194,4 @@ public void ProfileTest()
}
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm.Tests.Core/Modelling/IndexingModel/TypeInfo.cs b/Orm/Xtensive.Orm.Tests.Core/Modelling/IndexingModel/TypeInfo.cs
index 4354074352..03abfe87c4 100644
--- a/Orm/Xtensive.Orm.Tests.Core/Modelling/IndexingModel/TypeInfo.cs
+++ b/Orm/Xtensive.Orm.Tests.Core/Modelling/IndexingModel/TypeInfo.cs
@@ -100,19 +100,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- unchecked {
- int result = (Type!=null ? Type.GetHashCode() : 0);
- result = (result * 397) ^ (IsNullable ? 1 : 0);
- result = (result * 397) ^ Length;
- result = (result * 397) ^ Scale;
- result = (result * 397) ^ Precision;
- if (Culture!=null)
- result = (result * 397) ^ Culture.GetHashCode();
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Type, IsNullable, Length, Scale, Precision, Culture);
///
/// Implements the operator ==.
@@ -216,4 +204,4 @@ public TypeInfo(Type type, bool isNullable, int length, int scale, int precision
Precision = precision;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs b/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs
index d879610172..1b943fef94 100644
--- a/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs
+++ b/Orm/Xtensive.Orm.Tests.Framework/Dynamic.cs
@@ -219,11 +219,13 @@ internal class Signature : IEquatable
public Signature(IEnumerable properties)
{
this.properties = properties.ToArray();
- hashCode = 0;
+ HashCode hc = new();
foreach (DynamicProperty p in properties)
{
- hashCode ^= p.Name.GetHashCode() ^ p.Type.GetHashCode();
+ hc.Add(p.Name);
+ hc.Add(p.Type);
}
+ hashCode = hc.ToHashCode();
}
#region IEquatable Members
@@ -241,10 +243,7 @@ public bool Equals(Signature other)
#endregion
- public override int GetHashCode()
- {
- return hashCode;
- }
+ public override int GetHashCode() => hashCode;
public override bool Equals(object obj)
{
@@ -2298,4 +2297,4 @@ internal static class Res
public const string CloseBracketOrCommaExpected = "']' or ',' expected";
public const string IdentifierExpected = "Identifier expected";
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs b/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs
index 1aaca199b2..155ed8db18 100644
--- a/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs
+++ b/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs
@@ -54,10 +54,7 @@ public override bool Equals(object obj)
return Equals((Poco) obj);
}
- public override int GetHashCode()
- {
- return Value.GetHashCode();
- }
+ public override int GetHashCode() => Value.GetHashCode();
}
public class Poco
@@ -85,12 +82,7 @@ public override bool Equals(object obj)
return Equals((Poco) obj);
}
- public override int GetHashCode()
- {
- unchecked {
- return (Value1.GetHashCode() * 397) ^ Value2.GetHashCode();
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Value1, Value2);
public Poco(T1 Value1, T2 Value2)
{
@@ -137,15 +129,7 @@ public override bool Equals(object obj)
return Equals((Poco) obj);
}
- public override int GetHashCode()
- {
- unchecked {
- int result = Value1.GetHashCode();
- result = (result * 397) ^ Value2.GetHashCode();
- result = (result * 397) ^ Value3.GetHashCode();
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Value1, Value2, Value3);
public Poco()
{
@@ -942,4 +926,4 @@ private IEnumerable> GetLocalItems(int count)
.ToList();
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Annotations.cs b/Orm/Xtensive.Orm/Annotations.cs
index 234591ee70..4b185a1b5a 100644
--- a/Orm/Xtensive.Orm/Annotations.cs
+++ b/Orm/Xtensive.Orm/Annotations.cs
@@ -75,10 +75,7 @@ public override bool Equals(object obj)
/// Returns the hash code for this instance.
///
/// A hash code for the current .
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
+ public override int GetHashCode() => base.GetHashCode();
}
///
@@ -521,4 +518,4 @@ public PathReferenceAttribute([PathReference] string basePath)
[UsedImplicitly] public string BasePath { get; private set; }
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Arithmetic/ArithmeticRules.cs b/Orm/Xtensive.Orm/Arithmetic/ArithmeticRules.cs
index 020f3759ca..80e4d3baf1 100644
--- a/Orm/Xtensive.Orm/Arithmetic/ArithmeticRules.cs
+++ b/Orm/Xtensive.Orm/Arithmetic/ArithmeticRules.cs
@@ -45,10 +45,7 @@ public override bool Equals(object obj) =>
obj is ArithmeticRules other && Equals(other);
///
- public override int GetHashCode()
- {
- return ((byte)overflowBehavior << 8) | (byte)nullBehavior;
- }
+ public override int GetHashCode() => ((byte) overflowBehavior << 8) | (byte) nullBehavior;
// Constructors
diff --git a/Orm/Xtensive.Orm/Caching/WeakestCache.cs b/Orm/Xtensive.Orm/Caching/WeakestCache.cs
index f544c16498..4d6e30b266 100644
--- a/Orm/Xtensive.Orm/Caching/WeakestCache.cs
+++ b/Orm/Xtensive.Orm/Caching/WeakestCache.cs
@@ -101,10 +101,7 @@ public override bool Equals(object obj)
return Equals((WeakEntry) obj);
}
- public override int GetHashCode()
- {
- return hashCode;
- }
+ public override int GetHashCode() => hashCode;
#endregion
diff --git a/Orm/Xtensive.Orm/Collections/FlagCollection.cs b/Orm/Xtensive.Orm/Collections/FlagCollection.cs
index 4c0948f4de..a81fedea30 100644
--- a/Orm/Xtensive.Orm/Collections/FlagCollection.cs
+++ b/Orm/Xtensive.Orm/Collections/FlagCollection.cs
@@ -333,12 +333,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- int result = keys.GetHashCode();
- result = 29*result + flags.GetHashCode();
- return result;
- }
+ public override int GetHashCode() => HashCode.Combine(keys, flags);
#endregion
@@ -407,4 +402,4 @@ public virtual void GetObjectData(SerializationInfo info, StreamingContext conte
#endregion
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Collections/TypeRegistration.cs b/Orm/Xtensive.Orm/Collections/TypeRegistration.cs
index 0190877dec..221ef91087 100644
--- a/Orm/Xtensive.Orm/Collections/TypeRegistration.cs
+++ b/Orm/Xtensive.Orm/Collections/TypeRegistration.cs
@@ -69,15 +69,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- unchecked {
- int result = (type!=null ? type.GetHashCode() : 0);
- result = (result * 397) ^ (assembly!=null ? assembly.GetHashCode() : 0);
- result = (result * 397) ^ (@namespace!=null ? @namespace.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(type, assembly, @namespace);
///
public static bool operator ==(TypeRegistration left, TypeRegistration right)
@@ -128,4 +120,4 @@ public TypeRegistration(Assembly assembly, string @namespace)
this.@namespace = @namespace;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Comparison/ComparisonRule.cs b/Orm/Xtensive.Orm/Comparison/ComparisonRule.cs
index 4c11ba5900..d51a15714e 100644
--- a/Orm/Xtensive.Orm/Comparison/ComparisonRule.cs
+++ b/Orm/Xtensive.Orm/Comparison/ComparisonRule.cs
@@ -83,13 +83,7 @@ public override bool Equals(object obj) =>
obj is ComparisonRule other && Equals(other);
///
- public override int GetHashCode()
- {
- int result = (int)Direction;
- if (Culture != null)
- result ^= Culture.GetHashCode();
- return result;
- }
+ public override int GetHashCode() => HashCode.Combine(Direction, Culture);
#endregion
@@ -200,4 +194,4 @@ void ISerializable.GetObjectData(SerializationInfo info, StreamingContext contex
info.AddValue(nameof(Culture), cultureId);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Comparison/ComparisonRules.cs b/Orm/Xtensive.Orm/Comparison/ComparisonRules.cs
index e8ba8f39ab..fed28d3cda 100644
--- a/Orm/Xtensive.Orm/Comparison/ComparisonRules.cs
+++ b/Orm/Xtensive.Orm/Comparison/ComparisonRules.cs
@@ -23,7 +23,7 @@ public sealed class ComparisonRules :
{
private readonly ComparisonRule value;
private readonly ComparisonRules[] composite;
- private volatile int cachedHashCode;
+ private long cachedHashCode;
///
/// Predefined rules with = .
@@ -199,18 +199,20 @@ public override bool Equals(object obj) =>
///
public override int GetHashCode()
{
- if (cachedHashCode==0) lock (composite) if (cachedHashCode==0) {
+ var h = Volatile.Read(ref cachedHashCode);
+ if (h == 0) {
int tailIndex = TailIndex;
- int result = value.GetHashCode();
- if (tailIndex==0 && IsRecursive)
- result ^= 29 * 22; // Hash affection by IsRecursive
+ HashCode hc = new();
+ hc.Add(value);
+ if (tailIndex == 0 && IsRecursive)
+ hc.Add(1); // Hash affection by IsRecursive
else
- result ^= 29 * composite[tailIndex].GetHashCode();
+ hc.Add(composite[tailIndex]);
for (int i = 0; i < tailIndex; i++)
- result ^= (composite[i].GetHashCode() << i);
- cachedHashCode = result;
+ hc.Add(composite[i]);
+ Volatile.Write(ref cachedHashCode, (long)hc.ToHashCode() | (1L << 63)); // Set the highest bit as HasValue flag even when `hashCode == 0`
}
- return cachedHashCode;
+ return (int) h;
}
#endregion
@@ -313,4 +315,4 @@ private ComparisonRules(ComparisonRule value, ComparisonRules[] composite, bool
this.composite = composite;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Comparison/Internals/NoSystemComparerHandler.cs b/Orm/Xtensive.Orm/Comparison/Internals/NoSystemComparerHandler.cs
index 5322856c92..88a23a6dc7 100644
--- a/Orm/Xtensive.Orm/Comparison/Internals/NoSystemComparerHandler.cs
+++ b/Orm/Xtensive.Orm/Comparison/Internals/NoSystemComparerHandler.cs
@@ -36,13 +36,11 @@ public bool Equals(T other)
}
/// NotSupportedException.
- public override int GetHashCode()
- {
+ public override int GetHashCode() =>
throw new NotSupportedException(string.Format(
Strings.ExTypeXMustImplementY,
typeof(T).GetShortName(),
typeof(IEquatable).GetShortName()));
- }
// Constructors
@@ -51,4 +49,4 @@ private NoSystemComparerHandler()
{
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Conversion/Biconverter.cs b/Orm/Xtensive.Orm/Conversion/Biconverter.cs
index 174512e7d1..0cc1eec4ad 100644
--- a/Orm/Xtensive.Orm/Conversion/Biconverter.cs
+++ b/Orm/Xtensive.Orm/Conversion/Biconverter.cs
@@ -57,12 +57,7 @@ public override bool Equals(object obj) =>
obj is Biconverter other && Equals(other);
///
- public override int GetHashCode()
- {
- unchecked {
- return ((ConvertForward!=null ? ConvertForward.GetHashCode() : 0) * 397) ^ (ConvertBackward!=null ? ConvertBackward.GetHashCode() : 0);
- }
- }
+ public override int GetHashCode() => HashCode.Combine(ConvertForward, ConvertBackward);
#endregion
diff --git a/Orm/Xtensive.Orm/Core/HasVersion{TValue,TVersion}.cs b/Orm/Xtensive.Orm/Core/HasVersion{TValue,TVersion}.cs
index 630107db85..e857a3a180 100644
--- a/Orm/Xtensive.Orm/Core/HasVersion{TValue,TVersion}.cs
+++ b/Orm/Xtensive.Orm/Core/HasVersion{TValue,TVersion}.cs
@@ -61,14 +61,7 @@ public override bool Equals(object obj) =>
obj is HasVersion other && Equals(other);
///
- public override int GetHashCode()
- {
- unchecked {
- return
- ((Value!=null ? Value.GetHashCode() : 0) * 397) ^
- (Version!=null ? Version.GetHashCode() : 0);
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Value, Version);
///
/// Checks specified objects for equality.
@@ -114,4 +107,4 @@ public HasVersion(TValue value, TVersion version)
Version = version;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Core/Pair{TFirst,TSecond}.cs b/Orm/Xtensive.Orm/Core/Pair{TFirst,TSecond}.cs
index af240475fb..792a1fa8fd 100644
--- a/Orm/Xtensive.Orm/Core/Pair{TFirst,TSecond}.cs
+++ b/Orm/Xtensive.Orm/Core/Pair{TFirst,TSecond}.cs
@@ -57,12 +57,7 @@ public override bool Equals(object obj) =>
obj is Pair other && Equals(other);
///
- public override int GetHashCode()
- {
- unchecked {
- return ((First?.GetHashCode() ?? 0) * 397) ^ (Second?.GetHashCode() ?? 0);
- }
- }
+ public override int GetHashCode() => HashCode.Combine(First, Second);
///
/// Checks specified objects for equality.
diff --git a/Orm/Xtensive.Orm/Core/Pair{T}.cs b/Orm/Xtensive.Orm/Core/Pair{T}.cs
index 5a5e785983..edbfd52909 100644
--- a/Orm/Xtensive.Orm/Core/Pair{T}.cs
+++ b/Orm/Xtensive.Orm/Core/Pair{T}.cs
@@ -58,14 +58,7 @@ public override bool Equals(object obj) =>
obj is Pair other && Equals(other);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = (First!=null ? First.GetHashCode() : 0);
- result = (result * 397) ^ (Second!=null ? Second.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(First, Second);
///
/// Checks specified objects for equality.
diff --git a/Orm/Xtensive.Orm/Core/Segment.cs b/Orm/Xtensive.Orm/Core/Segment.cs
index a04902dcd6..78be3e5a54 100644
--- a/Orm/Xtensive.Orm/Core/Segment.cs
+++ b/Orm/Xtensive.Orm/Core/Segment.cs
@@ -66,12 +66,7 @@ public override bool Equals(object obj) =>
obj is Pair other && Equals(other);
///
- public override int GetHashCode()
- {
- int firstHash = Offset == null ? 0 : Offset.GetHashCode();
- int secondHash = Length == null ? 0 : Length.GetHashCode();
- return firstHash ^ 29 * secondHash;
- }
+ public override int GetHashCode() => HashCode.Combine(Offset, Length);
#endregion
@@ -119,4 +114,4 @@ public Segment(T offset, T length)
Length = length;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Linq/Internals/ExpressionHashCodeCalculator.cs b/Orm/Xtensive.Orm/Linq/Internals/ExpressionHashCodeCalculator.cs
index 4da105d2d3..54d78a5b39 100644
--- a/Orm/Xtensive.Orm/Linq/Internals/ExpressionHashCodeCalculator.cs
+++ b/Orm/Xtensive.Orm/Linq/Internals/ExpressionHashCodeCalculator.cs
@@ -86,10 +86,7 @@ protected override int VisitMemberAccess(MemberExpression m)
return Visit(m.Expression) ^ m.Member.GetHashCode();
}
- protected override int VisitMethodCall(MethodCallExpression mc)
- {
- return Visit(mc.Object) ^ mc.Method.GetHashCode() ^ HashExpressionSequence(mc.Arguments);
- }
+ protected override int VisitMethodCall(MethodCallExpression mc) => HashCode.Combine(Visit(mc.Object), mc.Method, HashExpressionSequence(mc.Arguments));
protected override int VisitLambda(LambdaExpression l)
{
@@ -108,18 +105,24 @@ protected override int VisitNew(NewExpression n)
protected override int VisitMemberInit(MemberInitExpression mi)
{
- var result = Visit(mi.NewExpression);
- foreach (var b in mi.Bindings)
- result ^= b.BindingType.GetHashCode() ^ b.Member.GetHashCode();
- return result;
+ HashCode hashCode = new();
+ hashCode.Add(Visit(mi.NewExpression));
+ foreach (var b in mi.Bindings) {
+ hashCode.Add(b.BindingType);
+ hashCode.Add(b.Member);
+ }
+ return hashCode.ToHashCode();
}
protected override int VisitListInit(ListInitExpression li)
{
- var result = VisitNew(li.NewExpression);
- foreach (var e in li.Initializers)
- result ^= e.AddMethod.GetHashCode() ^ HashExpressionSequence(e.Arguments);
- return result;
+ HashCode hashCode = new();
+ hashCode.Add(VisitNew(li.NewExpression));
+ foreach (var e in li.Initializers) {
+ hashCode.Add(e.AddMethod);
+ hashCode.Add(HashExpressionSequence(e.Arguments));
+ }
+ return hashCode.ToHashCode();
}
protected override int VisitNewArray(NewArrayExpression na)
diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/DatabaseDependencyBuilder.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/DatabaseDependencyBuilder.cs
index 010e3cf277..79b4afe580 100644
--- a/Orm/Xtensive.Orm/Orm/Building/Builders/DatabaseDependencyBuilder.cs
+++ b/Orm/Xtensive.Orm/Orm/Building/Builders/DatabaseDependencyBuilder.cs
@@ -31,12 +31,7 @@ public bool Equals(DatabaseReference other)
public override bool Equals(object obj) =>
obj is DatabaseReference other && Equals(other);
- public override int GetHashCode()
- {
- unchecked {
- return (TargetDatabase.GetHashCode() * 397) ^ OwnerDatabase.GetHashCode();
- }
- }
+ public override int GetHashCode() => HashCode.Combine(TargetDatabase, OwnerDatabase);
public static bool operator ==(DatabaseReference left, DatabaseReference right)
{
@@ -178,4 +173,4 @@ private DatabaseDependencyBuilder(BuildingContext context)
configurationMap = context.Configuration.Databases.ToDictionary(db => db.Name);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Building/Builders/StorageMappingBuilder.cs b/Orm/Xtensive.Orm/Orm/Building/Builders/StorageMappingBuilder.cs
index 9ad2d578e5..867af82e24 100644
--- a/Orm/Xtensive.Orm/Orm/Building/Builders/StorageMappingBuilder.cs
+++ b/Orm/Xtensive.Orm/Orm/Building/Builders/StorageMappingBuilder.cs
@@ -31,12 +31,7 @@ public bool Equals(MappingRequest other)
public override bool Equals(object obj) =>
obj is MappingRequest other && Equals(other);
- public override int GetHashCode()
- {
- unchecked {
- return (Assembly.GetHashCode() * 397) ^ Namespace.GetHashCode();
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Assembly, Namespace);
public static bool operator ==(MappingRequest left, MappingRequest right)
{
@@ -151,4 +146,4 @@ private StorageMappingBuilder(BuildingContext context)
verbose = BuildLog.IsLogged(LogLevel.Info);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Building/DependencyGraph/Edge.cs b/Orm/Xtensive.Orm/Orm/Building/DependencyGraph/Edge.cs
index 530e76fc4f..b748739f1f 100644
--- a/Orm/Xtensive.Orm/Orm/Building/DependencyGraph/Edge.cs
+++ b/Orm/Xtensive.Orm/Orm/Building/DependencyGraph/Edge.cs
@@ -20,12 +20,7 @@ namespace Xtensive.Orm.Building.DependencyGraph
public EdgeWeight Weight { get; }
///
- public override int GetHashCode()
- {
- unchecked {
- return (Tail.GetHashCode() * 397) ^ Head.GetHashCode();
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Tail, Head);
///
public bool Equals(Edge obj) =>
diff --git a/Orm/Xtensive.Orm/Orm/Configuration/SessionConfigurationCollection.cs b/Orm/Xtensive.Orm/Orm/Configuration/SessionConfigurationCollection.cs
index ef7bc600ea..9d76c68e03 100644
--- a/Orm/Xtensive.Orm/Orm/Configuration/SessionConfigurationCollection.cs
+++ b/Orm/Xtensive.Orm/Orm/Configuration/SessionConfigurationCollection.cs
@@ -124,16 +124,7 @@ public bool Equals(SessionConfigurationCollection obj)
}
///
- public override int GetHashCode()
- {
- unchecked {
- int result = (Default!=null ? Default.GetHashCode() : 0);
- result = (result * 397) ^ (System!=null ? System.GetHashCode() : 0);
- result = (result * 397) ^ (Service!=null ? Service.GetHashCode() : 0);
- result = (result * 397) ^ (KeyGenerator!=null ? KeyGenerator.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Default, System, Service, KeyGenerator);
#endregion
@@ -176,4 +167,4 @@ private SessionConfiguration BuildConfiguration(string name)
return result;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/ConnectionInfo.cs b/Orm/Xtensive.Orm/Orm/ConnectionInfo.cs
index e0ccc97652..d182303042 100644
--- a/Orm/Xtensive.Orm/Orm/ConnectionInfo.cs
+++ b/Orm/Xtensive.Orm/Orm/ConnectionInfo.cs
@@ -45,15 +45,7 @@ public override string ToString()
#region GetHashCode, Equals, ==, !=
///
- public override int GetHashCode()
- {
- unchecked {
- int result = (Provider!=null ? Provider.GetHashCode() : 0);
- result = (result * 397) ^ (ConnectionString!=null ? ConnectionString.GetHashCode() : 0);
- result = (result * 397) ^ (ConnectionUrl!=null ? ConnectionUrl.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Provider, ConnectionString, ConnectionUrl);
///
public override bool Equals(object obj)
@@ -129,4 +121,4 @@ public ConnectionInfo(string connectionUrl)
{
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/EntityState.cs b/Orm/Xtensive.Orm/Orm/EntityState.cs
index 6c83167a45..3e09d1e70c 100644
--- a/Orm/Xtensive.Orm/Orm/EntityState.cs
+++ b/Orm/Xtensive.Orm/Orm/EntityState.cs
@@ -304,10 +304,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- return Key.GetHashCode();
- }
+ public override int GetHashCode() => Key.GetHashCode();
///
public bool Equals(EntityState other)
@@ -341,4 +338,4 @@ internal EntityState(Session session, Key key, Tuple data, bool isStale)
IsStale = isStale;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs
index a061cea5b9..a2bb79a7d9 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/EntitySetTask.cs
@@ -42,10 +42,7 @@ public ItemsQueryCacheKey(FieldInfo referencingField, int? itemCountLimit)
{
ReferencingField = referencingField;
ItemCountLimit = itemCountLimit;
- unchecked {
- cachedHashCode = (ReferencingField.GetHashCode() * 397)
- ^ (ItemCountLimit.HasValue ? 1 : 0);
- }
+ cachedHashCode = HashCode.Combine(ReferencingField, ItemCountLimit.HasValue);
}
}
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/GraphContainer.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/GraphContainer.cs
index 2018137553..f9b14ce138 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/GraphContainer.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/GraphContainer.cs
@@ -115,10 +115,7 @@ public override bool Equals(object obj) =>
public override int GetHashCode()
{
- if (cachedHashCode == null)
- unchecked {
- cachedHashCode = (Key.GetHashCode() * 397) ^ Type.GetHashCode();
- }
+ cachedHashCode ??= HashCode.Combine(Key, Type);
return cachedHashCode.Value;
}
@@ -197,4 +194,4 @@ public GraphContainer(Key key, TypeInfo type, bool exactType, PrefetchManager ma
this.exactType = exactType;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/Node.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/Node.cs
index 932ad290c1..dde960d8a1 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/Node.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Nodes/Node.cs
@@ -35,10 +35,7 @@ public override bool Equals(object obj)
return Equals(obj as Node);
}
- public override int GetHashCode()
- {
- return Path.GetHashCode();
- }
+ public override int GetHashCode() => Path.GetHashCode();
public override string ToString()
{
@@ -70,4 +67,4 @@ protected Node(string path)
Path = path;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs
index b4b599a22b..d45d3acd49 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs
@@ -45,7 +45,7 @@ public RootContainerCacheKey(TypeInfo type, IEnumerable
{
this.descriptors = descriptors;
this.type = type;
- hashCode = unchecked ((type.GetHashCode() * 397) ^ descriptors.GetHashCode());
+ hashCode = HashCode.Combine(type, descriptors);
}
}
@@ -342,4 +342,4 @@ public PrefetchManager(Session session)
ColumnIndexesCacheSize, cacheEntry => cacheEntry.Key);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Linq/MemberCompilation/MemberCompilerProvider.cs b/Orm/Xtensive.Orm/Orm/Linq/MemberCompilation/MemberCompilerProvider.cs
index 4a643c3f11..b117343201 100644
--- a/Orm/Xtensive.Orm/Orm/Linq/MemberCompilation/MemberCompilerProvider.cs
+++ b/Orm/Xtensive.Orm/Orm/Linq/MemberCompilation/MemberCompilerProvider.cs
@@ -27,12 +27,8 @@ public bool Equals(CompilerKey other) => metadataToken == other.metadataToken
public override bool Equals(object obj) => obj is CompilerKey other && Equals(other);
- public override int GetHashCode()
- {
- unchecked {
- return module == null ? metadataToken : (module.GetHashCode() * 397) ^ metadataToken;
- }
- }
+ public override int GetHashCode() =>
+ module == null ? metadataToken : HashCode.Combine(module, metadataToken);
public CompilerKey(MemberInfo memberInfo)
{
diff --git a/Orm/Xtensive.Orm/Orm/Model/ColumnInfo.cs b/Orm/Xtensive.Orm/Orm/Model/ColumnInfo.cs
index b6fe08f6ff..5614a11c14 100644
--- a/Orm/Xtensive.Orm/Orm/Model/ColumnInfo.cs
+++ b/Orm/Xtensive.Orm/Orm/Model/ColumnInfo.cs
@@ -236,10 +236,7 @@ public override bool Equals(object obj) =>
|| obj is ColumnInfo other && Equals(other);
///
- public override int GetHashCode()
- {
- return field.GetHashCode();
- }
+ public override int GetHashCode() => field.GetHashCode();
#endregion
diff --git a/Orm/Xtensive.Orm/Orm/Model/IndexInfoRef.cs b/Orm/Xtensive.Orm/Orm/Model/IndexInfoRef.cs
index 12ad5cd538..f85b321a55 100644
--- a/Orm/Xtensive.Orm/Orm/Model/IndexInfoRef.cs
+++ b/Orm/Xtensive.Orm/Orm/Model/IndexInfoRef.cs
@@ -86,14 +86,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- unchecked {
- return
- ((IndexName!=null ? IndexName.GetHashCode() : 0) * 397) ^
- (TypeName!=null ? TypeName.GetHashCode() : 0);
- }
- }
+ public override int GetHashCode() => HashCode.Combine(IndexName, TypeName);
///
/// Implements the operator ==.
@@ -143,4 +136,4 @@ public IndexInfoRef(IndexInfo indexInfo)
KeyTupleDescriptor = indexInfo.KeyTupleDescriptor;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Model/KeyField.cs b/Orm/Xtensive.Orm/Orm/Model/KeyField.cs
index 1856846ce9..b21cbaff36 100644
--- a/Orm/Xtensive.Orm/Orm/Model/KeyField.cs
+++ b/Orm/Xtensive.Orm/Orm/Model/KeyField.cs
@@ -22,10 +22,7 @@ public sealed class KeyField : Node
public Direction Direction { get; private set; }
///
- public override int GetHashCode()
- {
- return Name.GetHashCode() ^ Direction.GetHashCode();
- }
+ public override int GetHashCode() => HashCode.Combine(Name, Direction);
///
public override bool Equals(object obj) =>
@@ -54,4 +51,4 @@ public KeyField(string name, Direction direction) : base(name)
Direction = direction;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Providers/Expressions/QueryParameterIdentity.cs b/Orm/Xtensive.Orm/Orm/Providers/Expressions/QueryParameterIdentity.cs
index 344c1a0781..c4c69ad4cf 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/Expressions/QueryParameterIdentity.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/Expressions/QueryParameterIdentity.cs
@@ -32,16 +32,7 @@ public bool Equals(QueryParameterIdentity other)
&& Mapping.Equals(other.Mapping);
}
- public override int GetHashCode()
- {
- unchecked {
- var hashCode = FieldName.GetHashCode();
- hashCode = (hashCode * 397) ^ ClosureObject.GetHashCode();
- hashCode = (hashCode * 397) ^ (int) BindingType;
- hashCode = (hashCode * 397) ^ Mapping.GetHashCode();
- return hashCode;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(FieldName, ClosureObject, BindingType, Mapping);
public static bool operator ==(QueryParameterIdentity left, QueryParameterIdentity right)
{
@@ -71,4 +62,4 @@ public QueryParameterIdentity(TypeMapping mapping, object closureObject, string
BindingType = bindingType;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderTask.cs b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderTask.cs
index 0acabb0291..bc0e8efb02 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderTask.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilderTask.cs
@@ -61,16 +61,9 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- return hashCode;
- }
+ public override int GetHashCode() => hashCode;
- private int CalculateHashCode()
- {
- return Type.GetHashCode() ^ Kind.GetHashCode() ^ ValidateVersion.GetHashCode()
- ^ HashBits(AvailableFields) ^ HashBits(ChangedFields);
- }
+ private int CalculateHashCode() => HashCode.Combine(Type, Kind, ValidateVersion, HashBits(AvailableFields), HashBits(ChangedFields));
private int HashBits(BitArray bits)
{
@@ -139,4 +132,4 @@ private PersistRequestBuilderTask(PersistRequestKind kind, TypeInfo type, BitArr
hashCode = CalculateHashCode();
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Rse/Column.cs b/Orm/Xtensive.Orm/Orm/Rse/Column.cs
index 01bd726416..66ffac5924 100644
--- a/Orm/Xtensive.Orm/Orm/Rse/Column.cs
+++ b/Orm/Xtensive.Orm/Orm/Rse/Column.cs
@@ -56,10 +56,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- return Name.GetHashCode();
- }
+ public override int GetHashCode() => Name.GetHashCode();
///
/// Implements the operator ==.
@@ -127,4 +124,4 @@ protected Column(string name, ColNum index, Type type, Column originalColumn)
Origin = originalColumn==null ? this : originalColumn.Origin;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Structure.cs b/Orm/Xtensive.Orm/Orm/Structure.cs
index 4777d234ad..be199fb5a5 100644
--- a/Orm/Xtensive.Orm/Orm/Structure.cs
+++ b/Orm/Xtensive.Orm/Orm/Structure.cs
@@ -345,10 +345,7 @@ private bool InnerEquals(Structure other, bool thisIsBound, bool otherIsBound)
}
///
- public override int GetHashCode()
- {
- return Tuple.GetHashCode();
- }
+ public override int GetHashCode() => Tuple.GetHashCode();
#endregion
@@ -485,4 +482,4 @@ protected Structure(SerializationInfo info, StreamingContext context)
DeserializationContext.Demand().SetObjectData(this, info, context);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/ChangeFieldTypeHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/ChangeFieldTypeHint.cs
index 64df8b31c3..a767ccb864 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/ChangeFieldTypeHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/ChangeFieldTypeHint.cs
@@ -51,15 +51,7 @@ public bool Equals(ChangeFieldTypeHint other)
public override bool Equals(UpgradeHint other) => Equals(other as ChangeFieldTypeHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (Type != null ? Type.GetHashCode() : 0);
- result = (result * 397) ^ (FieldName != null ? FieldName.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), Type, FieldName);
///
public override string ToString() => $"Change type of field: {Type}.{FieldName}";
@@ -94,4 +86,4 @@ public static ChangeFieldTypeHint Create(Expression> property
return new ChangeFieldTypeHint(typeof(T), propertyAccessExpression.GetProperty().Name);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/CopyFieldHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/CopyFieldHint.cs
index b001e748fd..1349bcd4ec 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/CopyFieldHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/CopyFieldHint.cs
@@ -57,17 +57,7 @@ public bool Equals(CopyFieldHint other)
public override bool Equals(UpgradeHint other) => Equals(other as CopyFieldHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (SourceType != null ? SourceType.GetHashCode() : 0);
- result = (result * 397) ^ (SourceField != null ? SourceField.GetHashCode() : 0);
- result = (result * 397) ^ (TargetType != null ? TargetType.GetHashCode() : 0);
- result = (result * 397) ^ (TargetField != null ? TargetField.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), SourceType, SourceField, TargetType, TargetField);
///
public override string ToString() =>
@@ -192,4 +182,4 @@ public static CopyFieldHint Create(
typeof(TTarget), targetField);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MergeTypeHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MergeTypeHint.cs
index 11f6ed1e35..ba8534df8e 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MergeTypeHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MergeTypeHint.cs
@@ -46,15 +46,7 @@ public bool Equals(MergeTypeHint other)
public override bool Equals(UpgradeHint other) => Equals(other as MergeTypeHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (NewType != null ? NewType.GetHashCode() : 0);
- result = (result * 397) ^ (OldType != null ? OldType.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), NewType, OldType);
///
public override string ToString() =>
@@ -92,4 +84,4 @@ public static MergeTypeHint Create()
return new MergeTypeHint(typeof(TOld), typeof(TNew));
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MoveFieldHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MoveFieldHint.cs
index 0a8069668a..bbb8c4404c 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MoveFieldHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/MoveFieldHint.cs
@@ -58,17 +58,7 @@ public bool Equals(MoveFieldHint other)
public override bool Equals(UpgradeHint other) => Equals(other as MoveFieldHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (SourceType != null ? SourceType.GetHashCode() : 0);
- result = (result * 397) ^ (SourceField != null ? SourceField.GetHashCode() : 0);
- result = (result * 397) ^ (TargetType != null ? TargetType.GetHashCode() : 0);
- result = (result * 397) ^ (TargetField != null ? TargetField.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), SourceType, SourceField, TargetType, TargetField);
///
public override string ToString() =>
@@ -194,4 +184,4 @@ public static MoveFieldHint Create(
typeof(TTarget), targetField);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RecycledTypeHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RecycledTypeHint.cs
index 6551753770..7866b5b127 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RecycledTypeHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RecycledTypeHint.cs
@@ -40,14 +40,7 @@ public bool Equals(RecycledTypeHint other)
public override bool Equals(UpgradeHint other) => Equals(other as RecycledTypeHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (Type != null ? Type.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), Type);
///
public override string ToString() => $"Recycled type: {Type}";
@@ -79,4 +72,4 @@ public static RecycledTypeHint Create()
return new RecycledTypeHint(typeof(T));
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveFieldHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveFieldHint.cs
index f86f45cfe0..ca1df09d3b 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveFieldHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveFieldHint.cs
@@ -55,15 +55,7 @@ public bool Equals(RemoveFieldHint other)
public override bool Equals(UpgradeHint other) => Equals(other as RemoveFieldHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (Type != null ? Type.GetHashCode() : 0);
- result = (result * 397) ^ (Field != null ? Field.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), Type, Field);
///
public override string ToString() => $"Remove field: {Type}.{Field}";
@@ -112,4 +104,4 @@ public static RemoveFieldHint Create(Expression> propertyAcce
return new RemoveFieldHint(typeof(T), propertyAccessExpression.GetProperty().Name);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveTypeHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveTypeHint.cs
index 17134b2290..5a8c7c8aa1 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveTypeHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RemoveTypeHint.cs
@@ -43,14 +43,7 @@ public bool Equals(RemoveTypeHint other)
public override bool Equals(UpgradeHint other) => Equals(other as RemoveTypeHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (Type != null ? Type.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), Type);
///
public override string ToString() => $"Remove type: {Type}";
@@ -69,4 +62,4 @@ public RemoveTypeHint(string typeName)
AffectedTables = Array.Empty();
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameFieldHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameFieldHint.cs
index 465531cb06..bb2941c0ae 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameFieldHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameFieldHint.cs
@@ -50,16 +50,7 @@ public bool Equals(RenameFieldHint other)
public override bool Equals(UpgradeHint other) => Equals(other as RenameFieldHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (TargetType != null ? TargetType.GetHashCode() : 0);
- result = (result * 397) ^ (OldFieldName != null ? OldFieldName.GetHashCode() : 0);
- result = (result * 397) ^ (NewFieldName != null ? NewFieldName.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), TargetType, OldFieldName, NewFieldName);
///
public override string ToString() =>
@@ -102,4 +93,4 @@ public static RenameFieldHint Create(
field.ReflectedType, oldFieldName, field.Name);
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameTypeHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameTypeHint.cs
index 070e654a1a..3da8811fca 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameTypeHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/RenameTypeHint.cs
@@ -46,15 +46,7 @@ public bool Equals(RenameTypeHint other)
public override bool Equals(UpgradeHint other) => Equals(other as RenameTypeHint);
///
- public override int GetHashCode()
- {
- unchecked {
- int result = base.GetHashCode();
- result = (result * 397) ^ (NewType != null ? NewType.GetHashCode() : 0);
- result = (result * 397) ^ (OldType != null ? OldType.GetHashCode() : 0);
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), NewType, OldType);
///
public override string ToString() =>
@@ -91,4 +83,4 @@ public static RenameTypeHint Create(string oldName)
return new RenameTypeHint(oldName, typeof(T));
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/UpgradeHint.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/UpgradeHint.cs
index 5b94bfe73f..2aa786982a 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Hints/UpgradeHint.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Hints/UpgradeHint.cs
@@ -27,10 +27,7 @@ public override bool Equals(object obj) =>
|| obj is UpgradeHint other && Equals(other);
///
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
+ public override int GetHashCode() => base.GetHashCode();
// Constructors
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Model/PartialIndexFilterInfo.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Model/PartialIndexFilterInfo.cs
index 13e68ff93e..94599e630e 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Model/PartialIndexFilterInfo.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Model/PartialIndexFilterInfo.cs
@@ -36,10 +36,7 @@ public override bool Equals(object obj)
return Equals((PartialIndexFilterInfo)obj);
}
- public override int GetHashCode()
- {
- return Expression.GetHashCode();
- }
+ public override int GetHashCode() => Expression.GetHashCode();
#endregion
@@ -57,4 +54,4 @@ public PartialIndexFilterInfo(string expression)
Expression = expression;
}
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Orm/Upgrade/Model/StorageTypeInfo.cs b/Orm/Xtensive.Orm/Orm/Upgrade/Model/StorageTypeInfo.cs
index ea3c319e17..fff627f931 100644
--- a/Orm/Xtensive.Orm/Orm/Upgrade/Model/StorageTypeInfo.cs
+++ b/Orm/Xtensive.Orm/Orm/Upgrade/Model/StorageTypeInfo.cs
@@ -121,20 +121,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- unchecked {
- int result = (Type != null ? Type.GetHashCode() : 0);
- result = (result * 397) ^ (IsNullable ? 1 : 0);
- if (Length.HasValue)
- result = (result * 397) ^ Length.Value;
- if (Scale.HasValue)
- result = (result * 397) ^ Scale.Value;
- if (Precision.HasValue)
- result = (result * 397) ^ Precision.Value;
- return result;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(Type, IsNullable, Length, Scale, Precision);
///
/// Implements the operator ==.
diff --git a/Orm/Xtensive.Orm/Orm/UrlInfo.cs b/Orm/Xtensive.Orm/Orm/UrlInfo.cs
index 9c5841de5a..7bf56a02a2 100644
--- a/Orm/Xtensive.Orm/Orm/UrlInfo.cs
+++ b/Orm/Xtensive.Orm/Orm/UrlInfo.cs
@@ -404,10 +404,7 @@ public override bool Equals(object obj)
}
///
- public override int GetHashCode()
- {
- return (url!=null ? url.GetHashCode() : 0);
- }
+ public override int GetHashCode() => url?.GetHashCode() ?? 0;
///
/// Checks specified objects for equality.
@@ -472,4 +469,4 @@ public virtual void GetObjectData(SerializationInfo info, StreamingContext conte
#endregion
}
-}
\ No newline at end of file
+}
diff --git a/Orm/Xtensive.Orm/Sql/Dml/SqlCustomFunctionType.cs b/Orm/Xtensive.Orm/Sql/Dml/SqlCustomFunctionType.cs
index 5f2798c77f..3aa7e2092d 100644
--- a/Orm/Xtensive.Orm/Sql/Dml/SqlCustomFunctionType.cs
+++ b/Orm/Xtensive.Orm/Sql/Dml/SqlCustomFunctionType.cs
@@ -40,10 +40,7 @@ public override bool Equals(object obj)
return Equals((SqlCustomFunctionType) obj);
}
- public override int GetHashCode()
- {
- return Name.GetHashCode();
- }
+ public override int GetHashCode() => Name.GetHashCode();
public static bool operator ==(SqlCustomFunctionType left, SqlCustomFunctionType right)
{
diff --git a/Orm/Xtensive.Orm/Tuples/Transform/WrappingTransformTupleBase.cs b/Orm/Xtensive.Orm/Tuples/Transform/WrappingTransformTupleBase.cs
index 5d2c9aba60..6544685776 100644
--- a/Orm/Xtensive.Orm/Tuples/Transform/WrappingTransformTupleBase.cs
+++ b/Orm/Xtensive.Orm/Tuples/Transform/WrappingTransformTupleBase.cs
@@ -68,10 +68,7 @@ public sealed override bool Equals(Tuple other)
}
///
- public sealed override int GetHashCode()
- {
- return origin.GetHashCode();
- }
+ public sealed override int GetHashCode() => origin.GetHashCode();
// Constructors
@@ -86,4 +83,4 @@ protected WrappingTransformTupleBase(Tuple tuple)
origin = tuple;
}
}
-}
\ No newline at end of file
+}
diff --git a/Weaver/Xtensive.Orm.Weaver/TypeIdentity.cs b/Weaver/Xtensive.Orm.Weaver/TypeIdentity.cs
index 1eb460a093..48562f4c1d 100644
--- a/Weaver/Xtensive.Orm.Weaver/TypeIdentity.cs
+++ b/Weaver/Xtensive.Orm.Weaver/TypeIdentity.cs
@@ -37,14 +37,9 @@ public bool Equals(TypeIdentity other)
&& WeavingHelper.TypeNameComparer.Equals(TypeName, other.TypeName);
}
- public override int GetHashCode()
- {
- unchecked {
- var typeNameHash = TypeName!=null ? WeavingHelper.TypeNameComparer.GetHashCode(TypeName) : 0;
- var assemblyNameHash = AssemblyName!=null ? WeavingHelper.AssemblyNameComparer.GetHashCode(AssemblyName) : 0;
- return assemblyNameHash * 397 ^ typeNameHash;
- }
- }
+ public override int GetHashCode() => HashCode.Combine(
+ TypeName != null ? WeavingHelper.TypeNameComparer.GetHashCode(TypeName) : 0,
+ AssemblyName != null ? WeavingHelper.AssemblyNameComparer.GetHashCode(AssemblyName) : 0);
public static bool operator ==(TypeIdentity left, TypeIdentity right)
{
@@ -63,4 +58,4 @@ public TypeIdentity(TypeReference type)
typeName = type.FullName;
}
}
-}
\ No newline at end of file
+}