Runtime: рдкреНрд░рд╕реНрддрд╛рд╡: рдЕрдЪреНрдЫреЗ рд╣реИрд╢ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП System.HashCode рдЬреЛрдбрд╝реЗрдВред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рджрд┐рд╕ре░ 2016  ┬╖  182рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/runtime

рдЕрджреНрдпрддрди 6/16/17: рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ

рдПрдкреАрдЖрдИ рдЖрдХрд╛рд░ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЕрднреА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдереНрд░реВрдкреБрдЯ/рд╡рд┐рддрд░рдг рдХреЛ рдорд╛рдкрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЙрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдирд┐рднрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдиреАрдЪреЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝реЗрдВ рдФрд░ @karelz рдЖрдкрдХреЛ рдпрд╣ рдореБрджреНрджрд╛ рд╕реМрдВрдкреЗрдЧрд╛ред

рдЕрджреНрдпрддрди 6/13/17: рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реНрд╡реАрдХреГрдд!

рдпрд╣рд╛рдВ рд╡рд╣ рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕реЗ @terrajobst рджреНрд╡рд╛рд░рд╛ https://github.com/dotnet/corefx/issues/14354#issuecomment -308190321 рдкрд░ рдЕрдиреБрдореЛрджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

// Will live in the core assembly
// .NET Framework : mscorlib
// .NET Core      : System.Runtime / System.Private.CoreLib
namespace System
{
    public struct HashCode
    {
        public static int Combine<T1>(T1 value1);
        public static int Combine<T1, T2>(T1 value1, T2 value2);
        public static int Combine<T1, T2, T3>(T1 value1, T2 value2, T3 value3);
        public static int Combine<T1, T2, T3, T4>(T1 value1, T2 value2, T3 value3, T4 value4);
        public static int Combine<T1, T2, T3, T4, T5>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5);
        public static int Combine<T1, T2, T3, T4, T5, T6>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6);
        public static int Combine<T1, T2, T3, T4, T5, T6, T7>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7);
        public static int Combine<T1, T2, T3, T4, T5, T6, T7, T8>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8);

        public void Add<T>(T value);
        public void Add<T>(T value, IEqualityComparer<T> comparer);

        [Obsolete("Use ToHashCode to retrieve the computed hash code.", error: true)]
        [EditorBrowsable(Never)]
        public override int GetHashCode();

        public int ToHashCode();
    }
}

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдореВрд▓ рдкрд╛рда рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред

рджрд▓реАрд▓

рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИрд╢ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХреЛрдб рдкрд░ рдмрджрд╕реВрд░рдд рдЬрд╛рджреВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдмрд┐рдЯ рдЯреНрд╡рд┐рдбрд▓рд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЦрд░рд╛рдм-рд▓реЗрдХрд┐рди-рд╕рдВрдХреНрд╖рд┐рдкреНрдд GetHashCode рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдирд╛ рдХрдо рдЖрдХрд░реНрд╖рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐

class Person
{
    public override int GetHashCode() => FirstName.GetHashCode() + LastName.GetHashCode();
}

рдкреНрд░рд╕реНрддрд╛рд╡

рд╣рдореЗрдВ рд╣реИрд╢ рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП HashCode рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЧрдбрд╝рдмрдбрд╝ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдЙрд▓рдЭрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╡реЛрдВ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рдЬреЛ рдХреБрдЫ рдорд╛рдореВрд▓реА рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде https://github.com/dotnet/corefx/issues/14354#issuecomment -305019329 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

// Will live in the core assembly
// .NET Framework : mscorlib
// .NET Core      : System.Runtime / System.Private.CoreLib
namespace System
{
    public struct HashCode
    {
        public static int Combine<T1>(T1 value1);
        public static int Combine<T1, T2>(T1 value1, T2 value2);
        public static int Combine<T1, T2, T3>(T1 value1, T2 value2, T3 value3);
        public static int Combine<T1, T2, T3, T4>(T1 value1, T2 value2, T3 value3, T4 value4);
        public static int Combine<T1, T2, T3, T4, T5>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5);
        public static int Combine<T1, T2, T3, T4, T5, T6>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6);
        public static int Combine<T1, T2, T3, T4, T5, T6, T7>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7);
        public static int Combine<T1, T2, T3, T4, T5, T6, T7, T8>(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8);

        public void Add<T>(T value);
        public void Add<T>(T value, IEqualityComparer<T> comparer);
        public void AddRange<T>(T[] values);
        public void AddRange<T>(T[] values, int index, int count);
        public void AddRange<T>(T[] values, int index, int count, IEqualityComparer<T> comparer);

        [Obsolete("Use ToHashCode to retrieve the computed hash code.", error: true)]
        public override int GetHashCode();

        public int ToHashCode();
    }
}

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ

рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП https://github.com/dotnet/corefx/issues/14354#issuecomment -305019329 рдкрд░ @terrajobst рдХреА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ; рдЙрдирдХреА рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдорд╛рдиреНрдп рд╣реИрдВред рдореИрдВ рдЗрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐:

  • рдПрдкреАрдЖрдИ рдХреЛ рдПрдХ рдордЬрдмреВрдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  • рдПрдкреАрдЖрдИ "рдП" рд╣реИрд╢ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╣реИрд╢ рдХреЛрдб рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • рдПрдкреАрдЖрдИ рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рджреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рд╕рдорд╛рди рдорд╛рди рд╕рдорд╛рди рд╣реИрд╢ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╣реА рдРрдк рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрд╢ рдХреЛрдб рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИрд╢ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧрд▓рддреА рд╕реЗ рдЙрди рдкрд░ рд░рдиреЛрдВ (рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рдВрд╕реНрдХрд░рдг) рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред
api-approved area-System.Numerics up-for-grabs

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдлреИрд╕рд▓реЗ

  • рд╣рдореЗрдВ рд╕рднреА AddRange рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдРрд░реЗ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдХреНрд╕рд░ рджрд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдПрдХ рдмрд╛рд░ рдмрдбрд╝реЗ рд╕рд░рдгреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрдгрдирд╛ рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЙрд▓рд┐рдВрдЧ рд╕рд╛рдЗрдб рдкрд░ рд▓реВрдк рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
  • рд╣рдо IEnumerable рдУрд╡рд░рд▓реЛрдб рдХреЛ AddRange рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
  • рд╣рдореЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ Add рдЕрдзрд┐рднрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ string рдФрд░ StringComparison рд▓реЗрддрд╛ рд╣реИред рд╣рд╛рдВ, рд╡реЗ IEqualityComparer рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ GetHashCode рдХреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдХрджрдо рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ IntelliSense рд╕реЗ рднреА рдЫрд┐рдк рдЬрд╛рдПрдВрдЧреЗред

рдпрд╣ рд╣рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ:

```рд╕реА#
// рдХреЛрд░ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд░рд╣реЗрдВрдЧреЗ
// .NET рдлреНрд░реЗрдорд╡рд░реНрдХ: mscorlib
// .NET рдХреЛрд░: System.Runtime / System.Private.CoreLib
рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рд┐рд╕реНрдЯрдо
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИрд╢рдХреЛрдб
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди рез);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди 6);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди6, T7 рдорд╛рди7);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди6, T7 рдорд╛рди7, T8 рдорд╛рди 8);

    public void Add<T>(T value);
    public void Add<T>(T value, IEqualityComparer<T> comparer);

    [Obsolete("Use ToHashCode to retrieve the computed hash code.", error: true)]
    [EditorBrowsable(Never)]
    public override int GetHashCode();

    public int ToHashCode();
}

}
```

рд╕рднреА 182 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреНрд░рд╕реНрддрд╛рд╡: рд╣реИрд╢ рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝реЗрдВ

public static HashCode Randomized<T> { get; } // or CreateRandomized<T>
or 
public static HashCode Randomized(Type type); // or CreateRandomized(Type type)

рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП T рдпрд╛ Type type рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡: рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ

public HashCode Combine<T>(T[] values);
public HashCode Combine<T>(T[] values, IEqualityComparer<T> comparer);
public HashCode Combine<T>(Span<T> values);
public HashCode Combine<T>(Span<T> values, IEqualityComparer<T> comparer);
public HashCode Combine<T>(IEnumerable<T> values);
public HashCode Combine<T>(IEnumerable<T> IEqualityComparer<T> comparer);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдУрд╡рд░рд▓реЛрдб Combine(_field1, _field2, _field3, _field4, _field5) рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд▓рд╛ рдХреЛрдб HashCode.Empty.Combine(_field1).Combine(_field2).Combine(_field3).Combine(_field4).Combine(_field5); рдХреЛ рдХрдореНрдмрд╛рдЗрди рдХреЙрд▓ рдХреЗ рдмрд┐рдирд╛ рдЗрдирд▓рд╛рдЗрди рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@AlexRadch

рдкреНрд░рд╕реНрддрд╛рд╡: рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ

рд╣рд╛рдВ, рдпрд╣ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЕрдВрддрд┐рдо рдпреЛрдЬрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдПрдкреАрдЖрдИ рдХреЛ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдорд╛рд░реНрд╡рд┐рди 32 рд╣реИрд╢ рдЬреЛ рдХреЛрд░рдХреНрд▓рд░ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реИрд╢рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ 8 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣реИрд╢ 32 рдФрд░ рд╣реИрд╢ 64 рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ 4 рдпрд╛ 8 рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд╛рдпрдХ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛? рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ / рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реЗрдВред рд╣реИрд╢ 64 рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдзреАрдорд╛ рд╣реИред рд╣реИрд╢ 32 рддреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рд╣реИ (рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рднреА рдЯреНрд░реЗрдбрдСрдл рд╣реИ)ред

рд╡рд╣ рд╣реИрд╢ рдмреАрдЬ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣реИрд╢ рдирд┐рдпрддрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рд╢рд╛рдпрдж рд╣реИрд╢ рдмрдирд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдЬреЛ рдмреАрдЬ рдирд╣реАрдВ рд▓реЗрддрд╛ (рдФрд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдПрдХ рдЬреЛ рдмреАрдЬ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдиреЛрдЯ: рдЕрдЧрд░ рдпрд╣ Fx рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ Roslyn рдХреЛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП GetHashCode рдХреЛ рдереВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ:

c# public override int GetHashCode() { var hashCode = -1923861349; hashCode = hashCode * -1521134295 + this.b.GetHashCode(); hashCode = hashCode * -1521134295 + this.i.GetHashCode(); hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(this.s); return hashCode; }

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдХрдИ рдмрджрд╕реВрд░рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╣реИрд╢ рдкрд╛рдХрд░ рд░реЛрдорд╛рдВрдЪрд┐рдд рд╣реЛрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдЬреЛ рднреА рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж!

рдореБрд░рдореБрд░рд╣рд╛рд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрд╣ рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрд╢рд┐рдВрдЧ рдЧреБрдг рд╣реИрдВред рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИрдВ, рдПрдХ рдЬреЛ 32-рдмрд┐рдЯ рд╣реИрд╢ рдХреЛ рдереВрдХрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЬреЛ 128-рдмрд┐рдЯ рд╣реИрд╢ рдХреЛ рдереВрдХрддрд╛ рд╣реИред

32-рдмрд┐рдЯ рдФрд░ 128-рдмрд┐рдЯ рджреЛрдиреЛрдВ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░рдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИред

@tannergooding MurmurHash рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреА рдЖрд╡рд╛рдЬрд╝ рд╕реЗ рддреЗрдЬрд╝, рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

@jkotas , рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рд╕реЗ 32-рдмрд┐рдЯ рдкрд░> 4-рдмрд╛рдЗрдЯ @CyrusNajmabadi рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ:

рд╣реИрд╢ 32 рдФрд░ рд╣реИрд╢ 64 рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ 4 рдпрд╛ 8 рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд╛рдпрдХ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛? рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ / рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реЗрдВред рд╣реИрд╢ 64 рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдзреАрдорд╛ рд╣реИред рд╣реИрд╢ 32 рддреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рд╣реИ (рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рднреА рдЯреНрд░реЗрдбрдСрдл рд╣реИ)ред

рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ 2.0 рдореЗрдВ рд░рдЦрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

@jamesqo , рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рд░реВрдк рд╕реЗ рд╣реИрд╢рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ)ред

рд╕рд╛рде рд╣реА, рд╡рд╣ рд▓реЗрдЦ рдореБрд░рдореБрд░реи рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред Murmur3 рдПрд▓реНрдЧреЛрд░рд┐рдердо рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рд╕реЗ 32-рдмрд┐рдЯ рдкрд░> 4-рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдЖрдИрдЯреА

рдореБрдЭреЗ рдХрд┐рд╕реА рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред

рдЖрдк @CyrusNajmabadi рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ

рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдХрд╛рд░ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ 95%+ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИред рдЖрдкрдХреЛ рд╣реИрд╢ 32 рдФрд░ рд╣реИрд╢ 64 рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рд╕рд╛рде рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдЙрди репрел% рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЕрднреА рдХреБрдЫ рдирд╣реАрдВ рд╣реИ...:-/

рд╣реИрд╢рдХреЛрдб = рд╣реИрд╢рдХреЛрдб * -1521134295 + EqualityComparer.Default.GetHashCode(this.s);

@CyrusNajmabadi рдЖрдк рдпрд╣рд╛рдБ EqualityComparer рдХреЛ рдХреНрдпреЛрдВ рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ this.s.GetHashCode ()?

рдЧреИрд░-рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП: рддрд╛рдХрд┐ рд╣рдореЗрдВ рд╢реВрдиреНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

рдпрд╣ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рдХрд░реАрдм рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдХреЗ рдЧреБрдордирд╛рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдЮрд╛рдд рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдмрд┐рд▓реНрдЯ рдЗрди рдПрдкреАрдЖрдИ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

EqualityComparer.Default.GetHashCode рдкрд░ рдХреЙрд▓ рд╢реВрдиреНрдп рдХреА рдЬрд╛рдВрдЪ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 10x+ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИ ...ред

EqualityComparer.Default.GetHashCode рдкрд░ рдХреЙрд▓ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 10x + рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЕрдЪреНрдЫреЗ рд╣реИрд╢ рдХреЛрдб рдПрдкреАрдЖрдИ рдереЗ рддреЛ рд╣рдо рдПрдлрдПрдХреНрд╕ рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рдереЗ рдЬрд┐рд╕реЗ рдореИрдВ рд╕реНрдердЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ :)

(рд╕рд╛рде рд╣реА, рд╣рдореЗрдВ рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рддрдм рд╣рдорд╛рд░реЗ рдЕрдирд╛рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рднреА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ)ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЯреБрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЯреБрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рд╣реИред

System.Tuple рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ EqualityComparer<Object>.Default рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред System.ValueTuple Object.GetHashCode рдХреЛ рдирд▓ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ - https://github.com/dotnet/coreclr/blob/master/src/mscorlib/shared/System/ValueTuple.cs#L809ред

рдирд╣реАрдВ рдУред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреБрдкрд▓ рд╕рд┐рд░реНрдл "рд╣реИрд╢ рд╣реЗрд▓реНрдкрд░реНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рди рд▓рд╛рдн рдорд┐рд▓ рд╕рдХреЗ?

рдорд╣рд╛рдиред рдореБрдЭреЗ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЕрдирд╛рдо рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХреА рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╡реЗ рдЙрдЪрд┐рдд рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдВ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдареАрдХ рд╣реИред :)

рд▓реЗрдХрд┐рди рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рд╣реВрдБред рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрд╢ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐/рдХрдм рдпрд╣ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рд╣рдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдбрд┐рдВрдЧ рдФрд░ рд╣реИрд╢ рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЦреБрд╢реА рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред

рдПрдкреАрдЖрдИ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рд╡рд╕реНрддреБрддрдГ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП 32 рдмрд┐рдЯ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореЗрд░реЗ рд╕рд╛рде рдареАрдХ рд░рд╣реЗрдЧрд╛ред рд╣реЗрдХ, 64 рдмрд┐рдЯ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВред рдмрд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдкреАрдЖрдИ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, "рдореИрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдЪрд┐рдд рдлреИрд╢рди рдореЗрдВ рд╣реИрд╢ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ"ред

рдореИрдВ рдЗрди рдмрдпрд╛рдиреЛрдВ рдХреЛ рд╕рдореЗрдЯ рдирд╣реАрдВ рд╕рдХрддрд╛:

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрд╢рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдереА рдЬреЛ рдЖрдХрд╛рд░ рдореЗрдВ 4 рдмрд╛рдЗрдЯреНрд╕ рдереАред рдЗрд╕рдореЗрдВ рдПрдХ рдХреЙрдореНрдмрд┐рдиреЗрд╢рди (рдЗрдВрдЯ) рд╡рд┐рдзрд┐ рдереА, рдЬреЛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрд╢ рдХреЛрдб рдореЗрдВ рдбреАрдЬреЗрдмреАрдПрдХреНрд╕ 33 рдПрдХреНрд╕-рдЬреИрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрд╢ рдХреЛрдб рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рд╣реИрд╢рдХреЛрдб рд▓реМрдЯрд╛рддреА рд╣реИред

@jkotas рдиреЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ DJBX33X рдЬреИрд╕рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдлреА рдордЬрдмреВрдд рдерд╛ред

рдФрд░

рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдХрд╛рд░ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ 95%+ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг 32 рдмрд┐рдЯ рд╕рдВрдЪрд┐рдд рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ 95% рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдРрд╕реЗ рдХреМрди рд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рдареАрдХ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ 95% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реИрдВ?

@jkotas , рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реИрд╢рдЯреЗрдмрд▓ рд▓реБрдХрдЕрдк рдЬреИрд╕реА рдФрд╕рдд рдЪреАрдЬреЗрдВ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдПрдХ рдЕрдбрд╝рдЪрди рдмрди рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдПрдкреАрдЖрдИ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЬреЗрдЖрдИрдЯреА рдЯреАрдо рдХреЛ 32-рдмрд┐рдЯ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рд╣реЛ, рдЬрдм рдХреЛрдИ рднреА рдЕрдиреБрдХреВрд▓рди рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реЛ рдкреНрд░рддрд┐рдпрд╛рдВ?

рдХреНрдпрд╛ рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг 32 рдмрд┐рдЯ рд╕рдВрдЪрд┐рдд рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ 95% рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ 32 рдмрд┐рдЯ рд╕рдВрдЪрд┐рдд рд╣реИрд╢ рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЬрд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдорд╛рд░реНрд╡рд┐рди рд╣реИрд╢ .NET рдХреЛрд░ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП - https://github.com/dotnet/corert/blob/87e58839d6629b5f90777f886a2f52d7a99c076f/src/System.Private.CoreLib/ src/System/Marvin.cs#L25. рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рд╡рд╣реА рдЧрд▓рддреА рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@jkotas , рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЫреЛрдЯреЗ рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдХреЛ рдкрд╕рдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЧреИрд░-рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдкреИрдЯрд░реНрди рдЫреЛрдЯрд╛ рдХреЛрдб рд╣реИред

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 32 рдмрд┐рдЯ рд╕рдВрдЪрдп рд╣реИрд╢ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЬрд▓рд╛ рджрд┐рдП рдЧрдП рд╣реИрдВ

рдпрд╣ 95% рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реИрд╢ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡реЗ рдЖрдЬ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯреЗрдб рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЫреЛрдЯреЗ рдЬреЗрдирд░реЗрдЯ рдХреЛрдб рдХреЛ рдкрд╕рдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЧреИрд░-рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдкреИрдЯрд░реНрди рдЫреЛрдЯрд╛ рдХреЛрдб рд╣реИред

рдпрд╣ рд░реЛрд╕рд▓рд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдпрд╣ Roslyn IDE рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП GetHashCodes рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦреЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдХреБрдЫ рд╕рдордЭрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ:

```рд╕реА#
рд╡рд╛рдкрд╕реА рд╣реИрд╢ред рдХреЙрдореНрдмрд┐рди (рдпрд╣ред рдП?ред рдЧреЗрдЯрд╣реИрд╢рдХреЛрдб () ?? 0,
this.B?.GetHashCode () ?? 0,
this.C?.GetHashCode() ?? 0);

is a lot nicer than a user seeing and having to maintain:

```c#
            var hashCode = -1923861349;
            hashCode = hashCode * -1521134295 + this.b.GetHashCode();
            hashCode = hashCode * -1521134295 + this.i.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(this.s);
            return hashCode;

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдХреЛрдб Fx рдореЗрдВ рд╣реИ:

https://github.com/dotnet/roslyn/blob/master/src/Compilers/Test/Resources/Core/NetFX/ValueTuple/ValueTuple.cs#L5

рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯреБрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдореЗрдВ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА рдЬреЛ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдиреЛрдЯ: рд╣рдордиреЗ рдЗрд╕реЗ рд░реЛрд╕рд▓рд┐рди рдореЗрдВ рднреА рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ:

c# return (this.A, this.B, this.C).GetHashCode();

рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдЪрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрд╢рд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА) рд╕рдВрд░рдЪрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реИрд╢ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡реЗ рдЖрдЬ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрд╢ рдПрдХ "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реИрд╢ рдерд╛ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ ASP.NET рд╡реЗрдмрд╕рд░реНрд╡рд░ DoS рд╣рдорд▓реЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдереЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣реИрд╢рдЯреЗрдмрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рддреЛ "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реИрд╢ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЦрд░рд╛рдм рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред

рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯреБрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ

рдЬрд░реВрд░реА рдирд╣реАрдВред рд╣рдордиреЗ рд╣реИрд╢рдХреЛрдб рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреБрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдХ рд╕реНрдЯреЙрдк рдЙрдкрд╛рдп рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИред

     return Hash.Combine(this.A?.GetHashCode() ?? 0,
                         this.B?.GetHashCode() ?? 0,
                         this.C?.GetHashCode() ?? 0);

рдпрд╣ рдореБрдЭреЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЖрдкрдХрд╛ рдкреЙрдЬрд╝рд┐рдЯреЙрдЗрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рджреЛ рдмрд╛рддреЗрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ:

рдореВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрд╢ рдПрдХ "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реИрд╢ рдерд╛ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ ASP.NET рд╡реЗрдмрд╕рд░реНрд╡рд░ DoS рд╣рдорд▓реЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдереЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╣реИрд╢рдЯреЗрдмрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рддреЛ "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реИрд╢ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЦрд░рд╛рдм рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред

рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдПрдХ рд╣реИрд╢ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реБрд░рдХреНрд╖рд╛/DoS рдЪрд┐рдВрддрд╛ рд╣реИред

рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдХрд╛рд░ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ 95%+ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдПрдХ рд╣реИрд╢ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ 95% рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд╛/DoS рд╕рдВрдмрдВрдзреА рдЪрд┐рдВрддрд╛ рд╣реИ, рд╡реЗ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрд┐рдд рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд░реВрд░реА рдирд╣реАрдВред рд╣рдордиреЗ рд╣реИрд╢рдХреЛрдб рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреБрдкрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдХ рд╕реНрдЯреЙрдк рдЙрдкрд╛рдп рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИред

рдареАрдХред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕реА рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

--
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдо рдХрд╣ рд░рд╣реЗ рд╣реИрдВ "рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд░реЛрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛"ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдЬрдЧрд╣реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреНрд░рд╛рд╣рдХ DoS рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ 'рдорд╛рд░реНрд╡рд┐рди рд╣реИрд╢' рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрдВрддрд┐рдо рд╣реИрд╢ рдореЗрдВ рдлрд╝реАрд▓реНрдб рд╣реИрд╢ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╝реЛрд░рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдЕрдиреНрдпрдерд╛ рдЦрд░рд╛рдм рд╕рдВрдпреЛрдЬрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдЧрд░ рд╣рдо 95% рдорд╛рдорд▓реЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрд╢ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рд╣рдо 5% рдорд╛рдорд▓реЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдореБрдЭреЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рдмрдврд╝рд┐рдпрд╛ :) рдХреНрдпрд╛ рд╣рдо рддрдм рдмреЗрдирдХрд╛рдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

```рд╕реА#
рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рд┐рд╕реНрдЯрдоред рдиреНрдпреВрдореЗрд░рд┐рдХреНрд╕ред рд╣реИрд╢рд┐рдВрдЧ
{
рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╣реИрд╢ рд╣реЗрд▓реНрдкрд░реНрд╕
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд░реАрдбреЛрдирд▓реА int RandomSeed = рдирдпрд╛ рд░реИрдВрдбрдо ()ред рдЕрдЧрд▓рд╛ (Int32.MinValue, Int32.MaxValue);

    public static int Combine(int h1, int h2)
    {
        // RyuJIT optimizes this to use the ROL instruction
        // Related GitHub pull request: dotnet/coreclr#1830
        uint rol5 = ((uint)h1 << 5) | ((uint)h1 >> 27);
        return ((int)rol5 + h1) ^ h2;
    }
}
Roslyn could then generate:

```c#
     return Hash.Combine(Hash.RandomSeed,
                         this.A?.GetHashCode() ?? 0,
                         this.B?.GetHashCode() ?? 0,
                         this.C?.GetHashCode() ?? 0);

рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдЕрдЪреНрдЫреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рднреА рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ рдЧреИрд░-рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИрд╢ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рди рд▓реЗрдВред

рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд╛/DoS рд╕рдВрдмрдВрдзреА рдЪрд┐рдВрддрд╛ рд╣реИ, рд╡реЗ рдЙрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрд┐рдд рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдкрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ ASP.NET рдРрдк рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛/DoS рдЪрд┐рдВрддрд╛ рд╣реИред

рдмрдврд╝рд┐рдпрд╛ :) рдХреНрдпрд╛ рд╣рдо рддрдм рдмреЗрдирдХрд╛рдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдореИрдВрдиреЗ рдЬреЛ рдХрд╣рд╛ рд╣реИ, рдпрд╣ рдЙрд╕рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬреЛ рдЙрдЪрд┐рдд рд╣реИред

рдЖрдк https://github.com/aspnet/Common/blob/dev/shared/Microsoft.Extensions.HashCodeCombiner.Sources/HashCodeCombiner.cs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдЬ ASP.NET рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдмрд╣реБрдд рдЦреБрд╢ рд╣реЛрдКрдВрдЧрд╛ (рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╕рдВрдпреЛрдЬрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдордЬрдмреВрдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдЬрд┐рд╕реЗ рд╣рдо рдЯреНрд╡рд┐рдХрд┐рдВрдЧ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ)ред

@jkotas рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐: p

рддреЛ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрдм DoS рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реЗ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ Marvin32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред

рд╣рдореЗрдВ "95% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛" рдХрд╣рдиреЗ рдХреЗ рдорд╛рд░реНрдЧ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдЧрдд рд╣реЛрдиреЗ рдкрд░ рднреА рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЧрд▓рддреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЗрд╕рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ рддреЛ рд╣реИрд╢ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдкреНрдЯреЛ рдмреЛрд░реНрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ "рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ" рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдПред

рдкреНрд░рддреНрдпреЗрдХ ASP.NET рдРрдк рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛/DoS рдЪрд┐рдВрддрд╛ рд╣реИред

рдареАрдХред рддреЛ рдЖрдЬ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рд╣реИрд╢рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╢рд╛рдпрдж рдЪреАрдЬреЗрдВ рдЦрд░рд╛рдм рдХрд░ рд░рд╣реА рд╣реИрдВ? рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рджреБрдирд┐рдпрд╛ рдХреА рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рддреЛ рдПрдХ рдЙрдЪрд┐рдд рд╣реИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдЬ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ?

рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЧрд▓рддреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЗрд╕рдХреА рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдЧрдд рд╣реЛ

рдпрджрд┐ рдЖрдк рдХреБрдЫ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗред "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рднреА рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ ASP.NET рдРрдк рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛/DoS рдЪрд┐рдВрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрджрд┐ рдЖрдк рдордирдорд╛рдирд╛ рдЗрдирдкреБрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрдирдкреБрдЯ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдбреАрдУрдПрд╕ рдЪрд┐рдВрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЖрдП рд╡реЗрдм рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдпрд╣ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред

рддреЛ рдпрд╣ рдЙрди рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЗрдЯ рд╣реИрдВ:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд┐рдиреНрд╣реЗрдВ DoS рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрднреА рд╣рдо рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЖрдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ
  2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд┐рдиреНрд╣реЗрдВ DoS рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрднреА рд╣рдо рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЖрдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ
  3. рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдХрд╛рд░ рдЬрд┐рдиреНрд╣реЗрдВ DoS рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрднреА рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ DoS рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдПрдХреНрд╕рдкреЛрдЬрд╝ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  4. рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдХрд╛рд░ рдЬрд┐рдиреНрд╣реЗрдВ DoS рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрднреА рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рд╣реИрд╢ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореВрд▓ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдорд╛рдорд▓реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ '1' рдпрд╛ '2' рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХреЗрдВред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдХрд┐ '2' рдХрд╛ рд╕рдорд╛рдзрд╛рди '1' рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рднреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЕрдЧрд░ рд╣рдо '1' рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рджреЗрдиреЗ рдХреЛ рднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВред рд╣рдо DoSing рдФрд░ ASP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдЧреИрд░-DoS рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдорджрдж рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред

--

рдпрджрд┐ рдпреЗ рджреЛ рдорд╛рдорд▓реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ (рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВ) рддреЛ рдХреНрдпреЛрдВ рди рд╕рд┐рд░реНрдл рджреЛ рдПрдкреАрдЖрдИ рджреЗрдВ? рдЙрдиреНрд╣реЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬред рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИрдВред рдЕрдЧрд░ рд▓реЛрдЧ рдЙрдирдХрд╛ рд╕рд╣реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрдврд╝рд┐рдпрд╛ ред рдЕрдЧрд░ рд▓реЛрдЧ рдЙрдирдХрд╛ рд╕рд╣реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рднреА рдареАрдХ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рдЖрдЬ рд╡реИрд╕реЗ рднреА рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдмрджрддрд░ рд╣реИрдВ?

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рддреБрдореНрд╣рд╛рд░рд╛ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ

рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдореЗрд░реА рдХреЛрдИ рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЧреНрд░рд╛рд╣рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЙрдирдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рд░ рд░реВрдк рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдХреНрд░рдордмрджреНрдз рдлреИрд╢рди рдореЗрдВ рдлрд╝реАрд▓реНрдб/рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдЧрдардмрдВрдзрди рдХрд░рдиреЗ рдХреЗ 99% рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬрд╝ рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рд░ рд░реВрдк рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдорддред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рд░ рд░реВрдк рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдХреНрд░рдордмрджреНрдз рдлреИрд╢рди рдореЗрдВ рдлрд╝реАрд▓реНрдб/рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдЧрдардмрдВрдзрди рдХрд░рдиреЗ рдХреЗ 99% рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬрд╝ рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдорддред

рдореИрдВ рдЗрд╕ рдкрд░ рдЖрдзреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЖрдк рджреЛрдиреЛрдВ рд╕реЗ рдорд┐рд▓рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред @jkotas рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЖрдк рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрджрд╛рд╣рд░рдг-рдЖрдзрд╛рд░рд┐рдд API рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдкрд╣рд▓реЗ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдерд╛ рдХреНрдпреЛрдВрдХрд┐ 32-рдмрд┐рдЯ рдкреНрд░рддрд┐рдпрд╛рдВ рдзреАрдореА рд╣реЛрдВрдЧреА, рдлрд┐рд░ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдПрдкреАрдЖрдИ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрдЧреА (рдЬреЛ рд╕рдЪ рдирд╣реАрдВ рд╣реИ; h.Combine(a).Combine(b) (рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд╕реНрдХрд░рдг) h.Combine(a); h.Combine(b); (рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд╕реНрдХрд░рдг))ред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдпрд╣рд╛рдВ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВ:

public static class HashCode
{
    public static int Combine<T>(T value1, Tvalue2);
    public static int Combine<T>(T value1, Tvalue2, IEqualityComparer<T> comparer);
    public static int Combine<T>(T value1, Tvalue2, T value3);
    public static int Combine<T>(T value1, Tvalue2, T value3, IEqualityComparer<T> comparer);
    public static int Combine<T>(T value1, Tvalue2, T value3, T value4);
    public static int Combine<T>(T value1, Tvalue2, T value3, T value4, IEqualityComparer<T> comparer);
    // ... All the way until value8
}

рдХреНрдпрд╛ рдпрд╣ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ?

рдореИрдВ рдЕрднреА рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЯреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 8 рдУрд╡рд░рд▓реЛрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рдЗрдирдЯреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ GetHashCode рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдпреЗ рджреЛ рдорд╛рдорд▓реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ (рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВ) рддреЛ рдХреНрдпреЛрдВ рди рд╕рд┐рд░реНрдл рджреЛ рдПрдкреАрдЖрдИ рджреЗрдВ? рдЙрдиреНрд╣реЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬред рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИрдВред рдЕрдЧрд░ рд▓реЛрдЧ рдЙрдирдХрд╛ рд╕рд╣реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрдврд╝рд┐рдпрд╛ред рдЕрдЧрд░ рд▓реЛрдЧ рдЙрдирдХрд╛ рд╕рд╣реА рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рднреА рдареАрдХ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡реЗ рд╡реИрд╕реЗ рднреА рдЖрдЬ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдмрджрддрд░ рд╣реИрдВ?

рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рд╡рд╣рд╛рдВ рд╣реЛрдиреЗ рдкрд░ рдЪреАрдЬреЛрдВ рдХрд╛ рдареАрдХ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ, рдПрдХреНрд╕рдПрд╕рдПрд╕ред рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рд╡реЗрдм рдлреЙрд░реНрдо рдореЗрдВ рднреА рдЖрдЙрдЯрдкреБрдЯ рдХреЛ HTML рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдереАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬреЛрдЦрд┐рдо рдирд╣реАрдВ рдкрддрд╛ рдерд╛, рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рддрдм рдкрддрд╛ рдЪрд▓рд╛ рдЬрдм рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рдереА, рдЙрдирдХрд╛ рдРрдк рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рдерд╛, рдФрд░ рдУрд╣, рдЕрдм рдЙрдирдХреА рдСрде рдХреБрдХреА рд╣рдЯрд╛ рджреА рдЧрдИ рд╣реИред

рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдирд╛ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡реЗ

  1. рдЬрд╛рдирд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
  2. рд╕рдордЭреЗрдВ рдХрд┐ рдЬреЛрдЦрд┐рдо рдХреНрдпрд╛ рд╣реИрдВред
  3. рдЙрди рдЬреЛрдЦрд┐рдореЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  4. рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЪреАрдЬрд╝ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реЗ рдзрд╛рд░рдгрд╛рдПрдВ рдЖрдо рддреМрд░ рдкрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬрдм рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реЛрддреА рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡реЗ рд╢реНрд╡реЗрдд рдкрддреНрд░ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП ASP.NET HashDoS рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╣рдордиреЗ рдЙрдирдХреЗ рд▓рд┐рдП рдЪреБрдирд╛рд╡ рдХрд┐рдпрд╛, рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд░рдирд╛ рд╕рд╣реА рдерд╛, рдФрд░ рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕реЗ рдХрд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рдереЗред рд╣рдореЗрдВ рд╕рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдм рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╕рдлрд▓рддрд╛ рдХрд╛ рдЧрдбреНрдврд╛ рд╣реЛ, рдЕрд╕рдлрд▓рддрд╛ рдирд╣реАрдВред рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрднреА-рдХрднреА рдкрд╕рдВрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдЧреИрд░-рд╕реБрд░рдХреНрд╖рд╛ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрд╢ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ; рддреЛ рджрд┐рдП рдЧрдП рджреЛ рд╡рд┐рдХрд▓реНрдк

  1. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрд╢ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЧреИрд░-рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдЧрд░реВрдХ рд╣реИ; рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдЧрд░реВрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ
  2. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрд╢ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдЧрд░реВрдХ рд╣реИ; рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдХрд╕реНрдЯрдо рдЧреИрд░-рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдЧрд░реВрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ

рддрдм рджреВрд╕рд░рд╛ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реИ; рдФрд░ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдХреНрд░рд┐рдкреНрдЯреЛ рд╣реИрд╢ рдкрд░ рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛; рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордЭреМрддрд╛ рдХрд░рддрд╛ рд╣реИ?

рдЗрди рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рдПрдХ рднреА рд╕рдВрдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдердо рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдХреЛрдб рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ @CyrusNajmabadi рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп .NET рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рд╣реИрд╢рд░ рдмрдЧреНрд╕ (рдЬреИрд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдЦреЛрдирд╛ рдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛрдирд╛) рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рдПрдиреНрдЯреНрд░реЙрдкреА рд╣реИред рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп)ред

рдореИрдВ "рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдПрд▓реНрдЧреЛрд░рд┐рджрдо" рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  1. рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк: рдореИрдВ рдЧреИрд░-рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣реИрд╢ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж xxHash, Marvin32, рдФрд░ SpookyHash) рдХреЗ рдПрдХ рд╕реВрдЯ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рднреЗрдЬрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рд╣реИрд╢рдХреЛрдб рдпрд╛ рд╣реИрд╢рдХреЛрдб рд╣реЗрд▓реНрдкрд░ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЙрди рдЕрдВрддрд░реЛрдВ рдХреЛ рджреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо GetHashCode рдХреЗ рд▓рд┐рдП рдЙрд╕ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

    • рдЙрддреНрдкрдиреНрди рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдпрджрд┐ рд░реЛрд╕рд▓рд┐рди Marvin32.Create(); рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд┐рдЬрд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реВрдЯ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣реЗрдВред

    • рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рдЧреИрд░-рдпрд╛рджреГрдЪреНрдЫрд┐рдХ/рдЦрд░рд╛рдм рдПрдиреНрдЯреНрд░рд╛рдкреА/рдзреАрдореА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирдП рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдФрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рд░реЛрд╕рд▓рд┐рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреБрд░рд╛рдирд╛ рдХреЛрдб рдкреБрд░рд╛рдиреЗ рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд░рд╣реЗрдЧрд╛ рдФрд░ рдирдпрд╛ рдХреЛрдб рдирдП рд╣реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдбреЗрд╡рд▓рдкрд░реНрд╕ (рдпрд╛ рд░реЛрд╕рд▓рд┐рди рдХреЛрдб рдлрд┐рдХреНрд╕) рдпрджрд┐ рдЪрд╛рд╣реЗрдВ рддреЛ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

    • рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ GetHashCode рдХреЗ рд▓рд┐рдП рд╣рдо рдЬреЛ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдмрдХрд┐ 32-рдмрд┐рдЯ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп structs рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдПрдХ 256-рдмрд┐рдЯ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ (рдХрд╣рдирд╛) CityHash рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрд░реНрдмрд╛рдж рдХрд░ рд╕рдХрддреА рд╣реИред

  1. рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди: рдПрдХ рдареАрдХ рд╕реЗ рд░реИрдВрдбрдорд╛рдЗрдЬреНрдб рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ (рдХреЛрдб @CyrusNajmabadi рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЛ рдзреЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ)ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмрд┐рдирд╛ рд╕рдВрдЧрддрддрд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдердо рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрд▓реНрдЯрд╛ рднреА рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рддрд┐-рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдпрд╛ рдкреНрд░рддрд┐-рдбрд┐рд╡рд╛рдЗрд╕) рд╡рд┐рдХрд▓реНрдк рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд╛рдЗрдЯ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ xxHash x64 Mac рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реИ рдЬрдмрдХрд┐ SpookyHash Xbox рдФрд░ iPhone рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реИред рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдЗрд╕ рдорд╛рд░реНрдЧ рд╕реЗ рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 64+ рдмрд┐рдЯ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреЗ рдкрд░ рднреА рдЙрдЪрд┐рдд рдкреНрд░рджрд░реНрд╢рди рд╣реЛред

рд╕реАрд╕реА @bartonjs , @terrajobst

@morganbr рдПрдХ рднреА рд╕рд╣реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реЛрдирд╛, рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕рд░рд▓, рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдПрдХ рд╕реВрдЯ рд╣реЛрдирд╛, рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдорд╛рд░реНрд╡рд┐рди рдХреМрди рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ Dictionary рдореЗрдВ рдбрд╛рд▓ рд╕рдХреВрдВред

рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдорд╛рд░реНрд╡рд┐рди рдХреМрди рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдбрд╛рд▓ рд╕рдХреВрдВред

рдЖрдк рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдбрд╛рд▓рддреЗ рд╣реИрдВ рд╡рд╣ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдбрд┐рдХреНрд╢рдирд░реА рдХрд╛ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред IDictionary рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдПрдкреАрдЖрдИ рджреЗрдЦреЗрдВ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЕрднреА рднреА рдПрдХ рдЖрдзрд╛рд░ 'рд╢рдмреНрджрдХреЛрд╢' рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рд╣рд░ рд╢реНрд░реЗрдгреА рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рди рд╣реЛред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реИрд╢рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдЯрди рд▓реЛрдЧ рдпрд╣реА рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВред рдХреБрдЫ рдРрд╕рд╛ рдЬрд┐рд╕рд╕реЗ рдХрд╛рдо рд╣реЛ рдЬрд╛рдП, рднрд▓реЗ рд╣реА рд╡рд╣ рд╣рд░ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рд╣реА рди рд╣реЛред

@morganbr рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╕рд░рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрд╢рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреАрд╡реНрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдХ-рдж-рд╕реАрди рдПрдкреАрдЖрдИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдЬ рд╣реИрд╢рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдпрд╛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рд╕реНрдкреВрдХреА рдмрдирд╛рдо рдорд╛рд░реНрд╡рд┐рди рдмрдирд╛рдо рдореБрд░рдореБрд░ рдХреНрдпреЛрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕реЗ рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрд╢ рдХреЛрдбреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреА рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рджреЗрдЦреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХрд╣рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ "рдпрд╣рд╛рдВ рдореЗрд░реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдореБрдЭреЗ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рд╣реИрд╢ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рддреЗрдЬрд╝ рд╣реИ рдХрд┐ рдореИрдВ рдлрд┐рд░ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рд╣реЛрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдбреЙрд╕ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЗрдирдкреБрдЯ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реЗ рд╣реИрд╢ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ"ред

@CyrusNajmabadi рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрдЧрддрддрд╛ рдХреА рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрд╣рд╛рдЬреЛрдВ рдХреЛ рдпрд╣ рдХрднреА рднреА рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдпрд╣ рдирд╣реАрдВ рдкрд╛рддреЗ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ "рдпрд╣ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ" рддрд░реАрдХреЗ рд╕реЗ )

рдПрдХ рдмрд╛рд░ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдпрд╣ рд╕реНрдерд┐рд░-рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреБрдЫ рд╕рд╛рд▓ рдмрд╛рдж рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ рдЬреЛ рдмреЗрд╣рддрд░-рдЗрди-рдж-рд╕рд╛рдорд╛рдиреНрдп рдХреЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдмрд╛рд▓реНрдЯреА рдХреЗ рдмреЗрд╣рддрд░ рд╕рдВрддреБрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫрд╛-рдЕрдЧрд░-рдмреЗрд╣рддрд░ рд╕рдВрддреБрд▓рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реВрдЪреА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ \

рдореЙрд░реНрдЧрди рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рддрд╣рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдЬ рдЖрдк рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╣реЛрдВрдЧреАред рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддреЗ рдереЗ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЦрд░рд╛рдм рд╣реЛ рдЧрдП рд╣реЛрдВрдЧреЗ, рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рд╣рдореЗрдВ рдирдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рдЙрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рд╡рд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд░реЛрдЬрд▓рд┐рди рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ (рдФрд░ ReSharper/рдЖрджрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ) рддрд╛рдХрд┐ рдХреБрдЫ рдЪреАрдЬреЗрдВ NewAwesomeThing2019 рдХреЗ рдмрдЬрд╛рдп SomeThingThatWasConsideredAwesomeIn2018 рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВред

рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдИ рднреА рд╕реБрдкрд░ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдлрдВрд╕ рдЧрдП рд╣реИрдВред рдлрд┐рд░ рдХреЛрдИ рдЕрдЧрд▓рд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдФрд╕рдд рдкреНрд░рджрд░реНрд╢рди рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЛ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдк рдЙрдирдХреЗ рдмреАрдЪ рдХреНрдпреЛрдВ рдЪреБрдиреЗрдВрдЧреЗред рдФрд░ рдлрд┐рд░... рдФрд░ рдлрд┐рд░....

рддреЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВрдЧреЗ рдХрд┐ рдХреНрдпреЛрдВ Roslyn/ReSharper/etc рдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП Marvin32, рдпрд╛ Murmur, рдпрд╛ FastHash, рдпрд╛ IntPtr.Size рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдВрдпреЛрдЬрди/рд╕рд╢рд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GetHashCode рдХреЛ рдСрдЯреЛ-рд▓рд┐рдЦрд╛ред рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреА рд╢рдХреНрддрд┐ рд╣реИред рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рд╢рдХреНрддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирдИ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИ... рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡рд╣реА рд░рдЦрдиреЗ рдХреА рд╢рдХреНрддрд┐ рднреА рджреА рд╣реИред (рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рджреБрдЦрдж рд╣реЛрдЧрд╛, рдФрд░ 3 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд░реЛрд╕рд▓рд┐рди/рд░реАрд╢реЗрд░реНрдкрд░/рдЖрджрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдирдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЗрддрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ ... рдЖрдорддреМрд░ рдкрд░)ред

@bartonjs рдХреНрдпрд╛ рд╣реИрд╢рд┐рдВрдЧ рдХреЛ рдЙрди рд╕рднреА рдЬрдЧрд╣реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ .Net рдЖрдкрдХреЛ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдпрд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЫрдБрдЯрд╛рдИ (рдкрд░рд┐рдЪрдп), Dictionary (рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдЕрд▓рдЧ рд╢реНрд░реГрдЦрдВрд▓рд╛), StringBuilder (8k рд╡рд┐рдЦрдВрдбреВ рдХреА рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА), рдЕрдзрд┐рдХрд╛рдВрд╢ LINQред

рд╣рдордиреЗ рдЖрдЬ рдЗрд╕ рдкрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рджреЗрд░реА рдФрд░ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ

  • рдПрдкреАрдЖрдИ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?

    • рдПрдкреАрдЖрдИ рдХреЛ рдПрдХ рдордЬрдмреВрдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

    • рд▓реЗрдХрд┐рди: рдПрдкреАрдЖрдИ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреАрд╕реАрдПрд▓ рдФрд░ рдПрдПрд╕рдкреА.рдиреЗрдЯ рдореЗрдВ)

    • рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдПрдлрдПрдХреНрд╕ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рд╕реБрд░рдХреНрд╖рд╛/рдбреЙрд╕ рдЬреЛрдЦрд┐рдореЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдг рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдкрд╡рд╛рдж рд╣рдореЗрд╢рд╛ рдореМрдЬреВрдж рд░рд╣реЗрдВрдЧреЗ ред

  • рдЗрд╕ рд╣реИрд╢ рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдЧреБрдг рдХреНрдпрд╛ рд╣реИрдВ?

    • рдЗрдирдкреБрдЯ рдореЗрдВ рд╕рднреА рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

    • рдкрд░рд┐рдгрд╛рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

    • рдПрдкреАрдЖрдИ "рдП" рд╣реИрд╢ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╣реИрд╢ рдХреЛрдб рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

    • рдПрдкреАрдЖрдИ рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рджреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рд╕рдорд╛рди рдорд╛рди рд╕рдорд╛рди рд╣реИрд╢ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╣реА рдРрдк рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрд╢ рдХреЛрдб рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИрд╢ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧрд▓рддреА рд╕реЗ рдЙрди рдкрд░ рд░рдиреЛрдВ (рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рдВрд╕реНрдХрд░рдг) рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред

рдПрдкреАрдЖрдИ рдЖрдХрд╛рд░

```рд╕реА#
// рдХреЛрд░ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд░рд╣реЗрдВрдЧреЗ
// .NET рдлреНрд░реЗрдорд╡рд░реНрдХ: mscorlib
// .NET рдХреЛрд░: System.Runtime / System.Private.CoreLib
рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рд┐рд╕реНрдЯрдо
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИрд╢рдХреЛрдб
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди рез);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди 6);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди6, T7 рдорд╛рди7);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди6, T7 рдорд╛рди7, T8 рдорд╛рди 8);

    public void Add<T>(T value);
    public void Add<T>(T value, IEqualityComparer<T> comparer);
    public void Add<T>(T[] value);
    public void Add<T>(T[] value, int index, int length);
    public void Add(byte[] value);
    public void Add(byte[] value, int index, int length);
    public void Add(string value);
    public void Add(string value, StringComparison comparisonType);

    public int ToHashCode();
}

}

Notes:

* We decided to not override `GetHashCode()` to produce the hash code as this would be weird, both naming-wise as well as from a behavioral standpoint (`GetHashCode()` should return the object's hash code, not the one being computed).
* We decided to use `Add` for the builder patter and `Combine` for the static construction
* We decided to use not provide a static initialization method. Instead, `Add` will do this on first use.
* The struct is mutable, which is unfortunate but we feel the best compromise between making `GetHashCode()` very cheap & not cause any allocations while allowing the structure to be bigger than 32-bit so that the hash code algorithm can use more bits during accumulation.
* `Combine` will just call `<value>.GetHashCode()`, so it has the behavior of the value's type `GetHashCode()` implementation
    - For strings that means different casing will produce different hash codes
    - For arrays, that means the hash code doesn't look at the contents but uses reference semantics for the hash code
    - If that behavior is undesired, the developer needs to use the builder-style approach

### Usage

The simple case is when someone just wants to produce a good hash code for a given type, like so:

```C#
public class Customer
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override int GetHashCode() => HashCode.Combine(Id, FirstName, LastName);
}

рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЗрд╕реЗ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрд▓ рд╕рд╛рдЗрдЯ рд╡рд╛рдВрдЫрд┐рдд рд╣реИрд╢ рдкрд╛рд╕ рдХрд░рддреА рд╣реИ рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБ/рдорд╛рди, рдЬреИрд╕реЗ:

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдЧреНрд░рд╛рд╣рдХ
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб int GetHashCode () =>
рд╣реИрд╢рдХреЛрдбред рдХреЙрдореНрдмрд╛рдЗрди (
рдкрд╣рдЪрд╛рди,
StringComparer.OrdinalIgnoreCase.GetHashCode(FirstName),
StringComparer.OrdinalIgnoreCase.GetHashCode(LastName),
);
}

And lastly, if the developer needs more flexibility, such as producing a hash code for more than eight values, we also provide a builder-style approach:

```C#
public partial class Customer
{
    public override int GetHashCode()
    {
        var hashCode = new HashCode();
        hashCode.Add(Id);
        hashCode.Add(FirstName, StringComparison.OrdinalIgnoreCase);
        hashCode.Add(LastName, StringComparison.OrdinalIgnoreCase);
        return hashCode.ToHashCode();
    }
}

рдЕрдЧрд▓рд╛ рдХрджрдо

рдпрд╣ рдорд╕рд▓рд╛ рдЕрдзрд░ рдореЗрдВ рд▓рдЯрдХрд╛ рд░рд╣реЗрдЧрд╛ред рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

@morganbr рдЕрдЪреНрдЫреЗ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдЧрд╛ред рдЖрдо рддреМрд░ рдкрд░, рд╣рдо рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд╣рдо рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЧреБрдг рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ .NET рд╡рд░реНрдХрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдорд╛рдкрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо (рдереНрд░реВрдкреБрдЯ рдФрд░ рд╡рд┐рддрд░рдг) рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ CPU рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреНрд╡рд╛рд░рд╛ рднрд┐рдиреНрди рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдорд╛рдкрддреЗ рд╕рдордп рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@jamesqo , рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреГрдкрдпрд╛ рддрджрдиреБрд╕рд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдВред

@terrajobst , рд╣рдо public static int Combine<T1>(T1 value); рднреА рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд┐рдд рдЗрдирдкреБрдЯ рд╣реИрд╢ рд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реЗ рдмрд┐рдЯреНрд╕ рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдПрдирдо рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рд╣реИрд╢ рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдХреЛрдб рдХреЗ рдирд┐рдЪрд▓реЗ рдХреБрдЫ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рдХрд┐ рд╣реИрд╢ рдПрдХ рдмрдбрд╝реЗ рд╕реНрдерд╛рди рдкрд░ рдлреИрд▓реЗ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд┐рдЯреНрд╕ рдХреЛ рдлреИрд▓рд╛рдиреЗ рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

public void Add(string value, StrinComparison comparison);

Nit: StringComparison рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ comparisonType рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рд░ рдЬрдЧрд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдирд╛рдордХрд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП StringComparison рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪреБрдирдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдирджрдВрдб рд╣реЛрдВрдЧреЗ:

  1. рдХреНрдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╣рд┐рдорд╕реНрдЦрд▓рди рдкреНрд░рднрд╛рд╡ рдЕрдЪреНрдЫрд╛ рд╣реИ? рдЕрд░реНрдерд╛рддреН, рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдЯ рдЗрдирдкреБрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд╝реНрд▓рд┐рдк рдХрд░рдиреЗ рдХрд╛ 50% рдореМрдХрд╛ рд╣реЛрддрд╛ рд╣реИ? рдЗрд╕ рд╕рд╛рдЗрдЯ рдореЗрдВ рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЕрдзреНрдпрдпрди рд╣реИред
  2. рдХреНрдпрд╛ рдЫреЛрдЯреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рддреЗрдЬрд╝ рд╣реИ? рдЪреВрдВрдХрд┐ HashCode.Combine рдЖрдо рддреМрд░ рдкрд░ 8 рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо ints рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░реЗрдЧрд╛, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдереНрд░реВрдкреБрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рд╛рдЗрдЯ рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реЗрдЯ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рднреА рд╣реИ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдпрд╛ рдЕрдиреНрдп рдкрд┐рд╡реЛрдЯреНрд╕ (рдУрдПрд╕, рдПрдУрдЯреА рдмрдирд╛рдо рдЬреЗрдЖрдИрдЯреА, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрддреНрддрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ C# рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рд╕рдХреЗрдВ рдХрд┐ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ .NET рдХреЗ рд▓рд┐рдП рдмрдиреА рд░рд╣реЗрдВрдЧреАред рдпрджрд┐ рдЖрдк рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддрдм рднреА рдЙрдкрдпреЛрдЧреА рдХрд╛рдо рд╣реЛрдЧрд╛ рдЬрдм рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣реИрд╢ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рд╕рд╛рде рдорд┐рд▓реЗрдЧрд╛ред

рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ (рд▓реЗрдХрд┐рди рджреВрд╕рд░реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ):

  • рдорд╛рд░реНрд╡рд┐рди 32 (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реА # рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ )ред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ String.GetHashCode рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рд╣реИ рдФрд░ рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ HashDoS рдкреНрд░рддрд┐рд░реЛрдзреА рд╣реИ
  • xxHash32 ( рдпрд╣рд╛рдБ x86 рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдЬрд┐рд╕рдореЗрдВ SMHasher рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╣реИ)
  • рдлрд╛рд░реНрдорд╣реИрд╢ ( рдпрд╣рд╛рдВ x64 рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬред рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреЗрддрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рд╕реА # рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
  • xxHash64 (32 рдмрд┐рдЯреНрд╕ рддрдХ рдЫреЛрдЯрд╛) (рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрддрд┐ рд╡рд┐рдЬреЗрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА xxHash32 рд╣реИ рддреЛ рдпрд╣ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
  • рд╕реНрдкреВрдХреАрд╣реИрд╢ (рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ)

рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ Add рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ ref HashCode рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ ref this рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ,

рдХреНрдпрд╛ readonly ref рд░рд┐рдЯрд░реНрди рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛? /рд╕реАрд╕реА @jaredpar @VSadov

рдЪреЗрддрд╛рд╡рдиреА: рдпрджрд┐ рдХреЛрдИ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд╣реАрдВ рдореМрдЬреВрджрд╛ рдХреЛрдб рдмреЗрд╕ рд╕реЗ рд╣реИрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪреБрдирддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╕реНрд░реЛрдд рдХрд╛ рд▓рд┐рдВрдХ рд░рдЦреЗрдВ рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ (рд╣рдореЗрдВ рдЗрд╕реЗ рднреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред

рдпрджрд┐ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЖрдИрдПрдордУ, рдРрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд╣реБрдд рдЙрдиреНрдирдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдФрд░ 'рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣' рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧреАред

рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдорд╛рдорд▓реЛрдВ рдХреЗ 99% рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ => HashCode.Combine(...) рдФрд░ рдареАрдХ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@morganbr

рд╣рдо public static int Combine<T1>(T1 value); рднреА рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд┐рдд рдЗрдирдкреБрдЯ рд╣реИрд╢ рд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реЗ рдмрд┐рдЯреНрд╕ рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛

рд╕рд╣реА рдмрд╛рддред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ рд╣реИред

@justinvp

Nit: StringComparison рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ comparisonType рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рд░ рдЬрдЧрд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдирд╛рдордХрд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП StringComparison рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдлрд┐рдХреНрд╕реНрдбред

@CyrusNajmabadi

рдЖрдИрдПрдордУ, Add рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмрд╣реБрдд рдЙрдиреНрдирдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдФрд░ 'рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣' рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдорд╛рдирд╛ред

@benaadams - рдкреБрди: рд░реЗрдлрд░реА this рд╕реЗ Add рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ - рдирд╣реАрдВ, this рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд░реЗрдлрд░реА рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ rValue рдпрд╛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

```рд╕реА#
рд░реЗрдлрд░реА рд╡рд░ рдЖрд░ = (рдирдпрд╛ рдЯреА ())ред рд░рд┐рдЯрд░реНрдиреНрд╕рд░реЗрдл рдпрд╣ ();

// r рдпрд╣рд╛рдБ рдХреБрдЫ рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреМрдирд╕рд╛? рджрд╛рдпрд░рд╛/рдЬреАрд╡рдирдХрд╛рд▓ рдХреНрдпрд╛ рд╣реИ?
рдЖрд░ = рдХреБрдЫ рдФрд░ ();
```

рдпрджрд┐ рдпрд╣ рддреБрд▓рдирд╛рддреНрдордХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЬреЗрдирдХрд┐рдВрд╕ рд▓реБрдХрдЕрдк 3 рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди ( рд╕реА рд╕реНрд░реЛрдд ) рдХреЛ рд╕реА # рдпрд╣рд╛рдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред

рдореИрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ:

@terrajobst

c# public void Add<T>(T[] value);

рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ (рдпрд╛рдиреА IEnumerable<T> )?

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ HashCode.Combine(array) рдФрд░ hashCode.Add((object)array) рдПрдХ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (рд╕рдВрджрд░реНрдн рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ) рдФрд░ hashCode.Add(array) рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (рдорд╛рдиреЛрдВ рдХреЗ рд╣реИрд╢ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ) рд╕рд░рдгреА)?

@CyrusNajmabadi

рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдорд╛рдорд▓реЛрдВ рдХреЗ 99% рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рдХреЗрд╡рд▓ => HashCode.Combine(...) рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдареАрдХ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 99% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ Combine рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ (рдФрд░ рдирд╣реАрдВ, рдХрд╣рддреЗ рд╣реИрдВ, 80%), рддреЛ Combine рдХрд┐рд╕реА рднреА рддрд░рд╣ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИрд╢рд┐рдВрдЧ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдРрд╕рд╛ рдХрд░рддреА рд╣реЛ (рдпрд╛ рддреЛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдпрд╛ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ HashCode )?

рдпрджрд┐ рдЬреЛрдбрд╝реЗрдВ рдПрдХ рд╢рдХреНрддрд┐ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣рдореЗрдВ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ Object.GetHashCode рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛, рддреЛ рд╣рдо рд╕рд░рдгреА (рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд IEnumerable) рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
c# public void AddEnumerableHashes<T>(IEnumerable<T> enumerable); public void AddEnumerableHashes<T>(T[] array); public void AddEnumerableHashes<T>(T[] array, int index, int length);
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ IEqualityComparers рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЛрдб рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдкреНрд░рд╕реНрддрд╛рд╡: рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ IEnumerable рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

C# return new HashCode { SomeField, OtherField, { SomeString, StringComparer.UTF8 }, { SomeHashSet, HashSet<int>.CreateSetComparer() } }.GetHashCode()

рдпрд╣ рд╣рд╛рде рд╕реЗ Add() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ), рдФрд░ рдЕрднреА рднреА рдХреЛрдИ рдЖрд╡рдВрдЯрди рдирд╣реАрдВ рд╣реИред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА

@SLaks рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЪреНрдЫрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ https://github.com/dotnet/csharplang/issues/455 (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд╕рдорд░реНрдерди рдерд╛) рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ HashCode рдХреЛ рдлрд░реНрдЬреА IEnumerable рд▓рд╛рдЧреВ рди рдХрд░рдирд╛ рдкрдбрд╝реЗ

рд╣рдордиреЗ рд╣реИрд╢ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GetHashCode() рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдЬреАрдм рд╣реЛрдЧрд╛, рдирд╛рдордХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рд╕рд╛рде рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ (GetHashCode() рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╣реИрд╢ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд░рд╣реА)ред

рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ GetHashCode рдкрд░рд┐рдХрд▓рд┐рдд рд╣реИрд╢рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @SLaks рдиреЗ ToHashCode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред

@justinvp рдпрджрд┐ GetHashCode() рдкрд░рд┐рдХрд▓рд┐рдд рд╣реИрд╢ рдХреЛрдб рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕рдВрднрд╡рддрдГ [Obsolete] рдФрд░ [EditorBrowsable(Never)] рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рджреВрд╕рд░реА рдУрд░, рдореБрдЭреЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рд╣реИрд╢ рдХреЛрдб рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

@terrajobst

рд╣рдордиреЗ рд╣реИрд╢ рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GetHashCode() рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдЬреАрдм рд╣реЛрдЧрд╛, рдирд╛рдордХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рд╕рд╛рде рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ ( GetHashCode() рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╣реИрд╢ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдирд╣реАрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ)ред

рд╣рд╛рдВ, GetHashCode() рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╣реИрд╢ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рджреЛ рд╣реИрд╢ рдХреЛрдб рдЕрд▓рдЧ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдЕрднреА рднреА рд╕рд╣реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ HashCode рдПрдХ рд╣реА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╕реЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ GetHashCode() ред

@terrajobst рдореИрдВрдиреЗ рдЕрднреА рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреАред рджреЗрд░реА рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдзреАрдорд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрдЧреЗ-рдкреАрдЫреЗ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд╣реАрдВ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ! рдЯрд╛рдбрд╛:

рдореБрдЭреЗ рдЗрд╕реЗ рд▓реЗрдиреЗ рдФрд░ рдереНрд░реВрдкреБрдЯ/рд╡рд┐рддрд░рдг рдорд╛рдкрди рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ" рд╕реЗ рдЖрдкрдХрд╛ рдпрд╣реА рдорддрд▓рдм рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдпрд╣рд╛рдБ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдХрдВрдб рджреЗрдВред

@terrajobst

рдХреНрдпрд╛ рд╣рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ

public void Add<T>(T[] value);
public void Add<T>(T[] value, int index, int length);
public void Add(byte[] value);
public void Add(byte[] value, int index, int length);

рдкреНрд░рддрд┐

public void AddRange<T>(T[] values);
public void AddRange<T>(T[] values, int index, int count);
public void AddRange<T>(T[] values, int index, int count, IEqualityComparer<T> comparer);

? @svick рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ Add -> AddRange рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ byte рдУрд╡рд░рд▓реЛрдб рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ рдмрд╛рдЗрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рддреЛ рд╣рдо рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ typeof(T) == typeof(byte) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ value -> values рдФрд░ length -> count ред рдПрдХ рддреБрд▓рдирд┐рддреНрд░ рдЕрдзрд┐рднрд╛рд░ рд╣реЛрдирд╛ рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

@terrajobst рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ

        public void Add(string value);
        public void Add(string value, StringComparison comparisonType);

рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕

        public void Add<T>(T value);
        public void Add<T>(T value, IEqualityComparer<T> comparer);

?

@svick

@justinvp рдпрджрд┐

:+1:

@terrajobst рдХреНрдпрд╛ рд╣рдо HashCode -> int рд╕реЗ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ ToHashCode рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ? рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: ToHashCode рдареАрдХ рд╣реИред рдиреАрдЪреЗ рджреЗрдЦреЗрдВ @CyrusNajmabadi рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред

@jamesqo StringComparison рдПрдХ рдПрдирдо рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рдорддреБрд▓реНрдп StringComparer рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╣рдо рд╣реИрд╢рдХреЛрдб -> int рд╕реЗ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ ToHashCode рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ?

рд╣рдордиреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рдмреИрдардХ рдореЗрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдВрддрд┐рдо 'рдЗрдВрдЯ' рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рд╣реИрд╢рдХреЛрдб рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧ рдЕрдХреНрд╕рд░ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХрд╛ рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ, рдФрд░ рдЦреБрдж рдХреЛ рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрдирд╛ рдЕрдЬреАрдм рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ:

HashCode hc = ...

int i1 = hc;
int i2 = hc;

рддрдм рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рдереЗред

рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрд╛рдВрддрд░рдг рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ)ред

рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдирд╛рдо рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА "ToHashCodeAndReset" (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛)ред рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдЪрдЯреАрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯреЗрд▓рд┐рдЬреЗрдВрд╕ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдмрд╛рдЗрдЯ рдУрд╡рд░рд▓реЛрдб рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо typeof(T) == typeof(byte) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

рдЖрдИрдЖрдИрдЖрд░рд╕реА рдЬреЗрдЖрдИрдЯреА рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдЗрд╕рдХреЗ рдареАрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд┐рдВрддрд╛ рдереАред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЧреИрд░-рдореВрд▓реНрдп-рдкреНрд░рдХрд╛рд░ "рдЯрд╛рдЗрдкреЛрдлрд╝ ()" рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рддрдХ рдЬрд┐рдЯ рдореВрд▓реНрдп-рдкреНрд░рдХрд╛рд░ рдЯрд╛рдЗрдкреЛрдлрд╝ () рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рддрдм рддрдХ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@CyrusNajmabadi рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрдирдЬрд╛рди рдерд╛ рдХрд┐ int рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕реНрдерд┐рддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред ToHashCode рдпрд╣ рддрдм рд╣реИред

рдХреНрд░рд┐рдкреНрдЯреЛ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП - http://tuprints.ulb.tu-darmstadt.de/2094/1/thesis.lehmann.pdf

@terrajobst , рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ ( рдпрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ) рдФрд░ рддрдп рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рд╕рдВрд╢реЛрдзрд┐рдд рдПрдкреАрдЖрдИ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ-рдЕрдиреБрдореЛрджрд┐рдд/рдЕрдк рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдо рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@blowdart , рдЗрд╕рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рднрд╛рдЧ рдЬрд┐рд╕реЗ рдЖрдк рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореИрдВ рдКрдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЧреИрд░-рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣реИрд╢ рдЬреЛ рдореБрдЭреЗ рд╣реИрд╢рдбреЙрд╕ рдмреНрд░реЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рд╡реЗ рдорд╛рд░реНрд╡рд┐рди рдФрд░ рд╕рд┐рдкрд╣рд╛рд╢ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмрдбрд╝рдмрдбрд╝рд╛рд╣рдЯ (рдХрд╣рддреЗ рд╣реИрдВ) рдХреЛ рдЕрднреА рднреА рддреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ DoS рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛

рдХреЛрдИ рдирд╣реАрдВ, рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ "рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрд╢ рдХреЛрдб рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ" рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлреИрд╕рд▓реЗ

  • рд╣рдореЗрдВ рд╕рднреА AddRange рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдРрд░реЗ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдХреНрд╕рд░ рджрд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдПрдХ рдмрд╛рд░ рдмрдбрд╝реЗ рд╕рд░рдгреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрдгрдирд╛ рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЙрд▓рд┐рдВрдЧ рд╕рд╛рдЗрдб рдкрд░ рд▓реВрдк рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
  • рд╣рдо IEnumerable рдУрд╡рд░рд▓реЛрдб рдХреЛ AddRange рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
  • рд╣рдореЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ Add рдЕрдзрд┐рднрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ string рдФрд░ StringComparison рд▓реЗрддрд╛ рд╣реИред рд╣рд╛рдВ, рд╡реЗ IEqualityComparer рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ GetHashCode рдХреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдХрджрдо рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ IntelliSense рд╕реЗ рднреА рдЫрд┐рдк рдЬрд╛рдПрдВрдЧреЗред

рдпрд╣ рд╣рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ:

```рд╕реА#
// рдХреЛрд░ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд░рд╣реЗрдВрдЧреЗ
// .NET рдлреНрд░реЗрдорд╡рд░реНрдХ: mscorlib
// .NET рдХреЛрд░: System.Runtime / System.Private.CoreLib
рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рд┐рд╕реНрдЯрдо
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИрд╢рдХреЛрдб
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди рез);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди 6);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди6, T7 рдорд╛рди7);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЗрдВрдЯ рдХрдореНрдмрд╛рдЗрди(T1 рдорд╛рди1, T2 рдорд╛рди2, T3 рдорд╛рди3, T4 рдорд╛рди4, T5 рдорд╛рди5, T6 рдорд╛рди6, T7 рдорд╛рди7, T8 рдорд╛рди 8);

    public void Add<T>(T value);
    public void Add<T>(T value, IEqualityComparer<T> comparer);

    [Obsolete("Use ToHashCode to retrieve the computed hash code.", error: true)]
    [EditorBrowsable(Never)]
    public override int GetHashCode();

    public int ToHashCode();
}

}
```

рдЕрдЧрд▓реЗ рдЪрд░рдг: рдореБрджреНрджрд╛ рдЕрдк-рдлреЙрд░-рдЧреНрд░реИрдмреНрд╕ рд╣реИ - рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ https://github.com/dotnet/corefx/issues/14354#issuecomment -305028686 рджреЗрдЦреЗрдВ, рддрд╛рдХрд┐ рд╣рдо рддрдп рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓реЗрдирд╛ рд╣реИ (рдереНрд░реВрдкреБрдЯ рдФрд░ рд╡рд┐рддрд░рдг рдорд╛рдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рддрд┐ рд╕реАрдкреАрдпреВ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрддреНрддрд░)ред

рдЬрдЯрд┐рд▓рддрд╛: рдмрдбрд╝рд╛

рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рд▓реЗрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдкрд┐рдВрдЧ рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЬрдЧрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИред ( @jamesqo рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдФрд░ рд╕рдмрд╕реЗ рд▓рдВрдмрд╛ рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИ)

@karelz рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╡рд┐рдЪрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪреБрдирдиреЗ рдХреА рдпреЛрдЧреНрдпрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реВрдЪреАрдмрджреНрдз рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ @morganbr рдореЗрдВ рджреЗрдЦрд╛ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реА # рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рд╕реА ++ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреГрд╖реНрдарднреВрдорд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдРрдк рд▓рд┐рдЦрдиреЗ рдореЗрдВ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧреАред

рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЕрдк-рдлреЙрд░-рдЧреНрд░реИрдмреНрд╕ рд╕реВрдЪреА рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред рдЕрдЧрд░ рдЖрдЬ рд╕реЗ рдПрдХ рд╕рдкреНрддрд╛рд╣ рддрдХ рдХреЛрдИ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрд╕рдИ рдпрд╛ рд░реЗрдбрд┐рдЯ рдкрд░ рдПрдХ рдкреНрд░рд╢реНрди рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЦрдВрдбрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ (рдпрд╛ рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ Murmur3 рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдЕрдкрдиреА рдХрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдБ: https://gist.github.com/tannergooding/0a12559d1a912068b9aeb4b9586aad7f

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг: Mumur3 (рдФрд░ рдЕрдиреНрдп) рдбреЗрдЯрд╛ рдХреЗ рдмрдбрд╝реЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИрдВ рдФрд░ рдорд╣рд╛рди рд╡рд┐рддрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдбреЗрдЯрд╛ рдХреЗ рдЫреЛрдЯреЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП 'рдЦрд░рд╛рдм' (рдЧрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡рд┐рддрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВ) рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрджрд┐ рд╕рдордЧреНрд░ рдмрд╛рдЗрдЯ рдЧрд┐рдирддреА рдПрдХреНрд╕ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдП рдХрд░реЗрдВ; рдЕрдиреНрдпрдерд╛, рдПрд▓реНрдЧреЛрд░рд┐рдердо рдмреА рдХрд░реЗрдВред рдпрд╣ рдЕрднреА рднреА рдирд┐рдпрддрд╛рддреНрдордХ (рдкреНрд░рддрд┐ рд░рди) рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐ рдФрд░ рд╡рд┐рддрд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдпрд╣ рд╢рд╛рдпрдж рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ SIMD рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреБрдЫ рд╕реНрддрд░ рдкрд░ FCALL рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рдмрдлрд╝рд░рдХреЙрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╛ рдЗрд╕рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рд▓реЗрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ System.Numerics.Vector ред

@jamesqo , рд╣рдореЗрдВ рдЪреБрдирд╛рд╡ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ; рдЙрдореНрдореАрджрд╡рд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕реА #, рд╣рд╛рд▓рд╛рдВрдХрд┐ @tannergooding рдмрддрд╛рддреЗ рд╣реИрдВ, рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╡рд┐рд╢реЗрд╖ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЪреБрдирд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╢рд╛рдпрдж рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдмрд░реНрдмрд╛рдж рд╣реЛрдиреЗ рдХреА рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдПрдкреАрдЖрдИ рдФрд░ рдЗрдирдкреБрдЯ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реАрдорд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1-10 рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

@tannergooding , рдЙрд╕ рддрд░рд╣ рдХреА рдЕрдиреБрдХреВрд▓рди рдХреНрд╖рдорддрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдРрдб рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрд┐рддрдиреА рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдмрдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрдореНрдмрд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдРрдб рдХреЙрд▓реНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдХрдВрдмрд╛рдЗрди рдХреЙрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреА рд╣реИред

рд╕рд╛рде рд╣реА, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрдирдкреБрдЯ рдХреА рд╕рдмрд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реАрдорд╛ 4-32 рдмрд╛рдЗрдЯреНрд╕ ( Combine`1 - Combine`8 ) рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрд╕ рд╕реАрдорд╛ рдкрд░ рдмрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдЙрд╕ рддрд░рд╣ рдХреА рдЕрдиреБрдХреВрд▓рди рдХреНрд╖рдорддрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдРрдб рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрд┐рддрдиреА рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдЖрдХрд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд░реАрдм рд╣реИ) ...

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП Combine рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдпреЗ рд╕рднреА рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдЕрдВрддрд┐рдо рд╣реИрд╢ рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рддреЛ рдирд╛рдо 'рдЦрд░рд╛рдм' рд╣реИ рдФрд░ Compute рдЬреИрд╕рд╛ рдХреБрдЫ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо Combine рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╕рднреА рдЗрдирдкреБрдЯ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Finalize рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрдВрддрд┐рдо рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрддреА рд╣реИ рдПрдХ рдЕрдВрддрд┐рдо рд╣реИрд╢ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдпреБрдХреНрдд (рд╣реИрд╢ рдХреЛрдб рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд┐рдЯреНрд╕ рд╣рд┐рдорд╕реНрдЦрд▓рди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ)ред

рдмрд┐рд▓реНрдбрд░ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ Add рдФрд░ ToHashCode рдкрджреНрдзрддрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ Add рд╡рд┐рдзрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдХреЗрд╡рд▓ ToHashCode рдкрд░ рдХреЙрд▓ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд/рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ (рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рд╣реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ) рдпрд╛ рдпрджрд┐ рд╡реЗ рд╣реИрдВ рдлреНрд▓рд╛рдИ рдкрд░ рд╕рдВрдпреБрдХреНрдд рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ (рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХреБрд▓ рдЖрдХрд╛рд░ рдХреЛ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдХрдо рдЬрдЯрд┐рд▓ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, xxHash32 рдЖрдЬрд╝рдорд╛рдПрдВред рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реА # рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ ( рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕реЗ рдХрд┐рдпрд╛ рд╣реИ )ред

рдЕрднреА рднреА рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рд╕реА # рдореБрд░рдореБрд░ 3 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдереНрд░реВрдкреБрдЯ рджрд░реЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдпреЗ 1-8 рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдХрдВрдмрд╛рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВ:

1070.18 mb/s
1511.49 mb/s
1674.89 mb/s
1957.65 mb/s
2083.24 mb/s
2140.94 mb/s
2190.27 mb/s
2245.53 mb/s

рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП GetHashCode рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЧрдгрдирд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧрдгрдирд╛ рдореВрд▓реНрдп рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ int рдорд╛рдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИрдВред

рдереНрд░реВрдкреБрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 10,001 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдпрд╛, рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ 'рд╡рд╛рд░реНрдордЕрдк' рд░рди рдХреЗ рд░реВрдк рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ред

рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ, рдореИрдВ 10,000 рдЙрдк-рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ HashCode.Combine рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рдкрд┐рдЫрд▓реЗ рдЙрдк-рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВ рддрдм рдФрд╕рдд рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдФрд╕рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЖрдЧреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддрд┐ рдХреЙрд▓ рдФрд╕рдд рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд▓реВрдк рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдк-рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗред рдлрд┐рд░ рдореИрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдереНрд░реВрдкреБрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдпреБрдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдХреЛрдб рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗред

@tannergooding , рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рд╕рд╣реА рдорд╛рдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, API рдХрд╛ рдЖрд╢рдп рдпрд╣ рд╣реИ рдХрд┐ HashCode.Combine(a, b) рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ

HashCode hc = new HashCode();
hc.Add(a); // Initializes the hash state, calls a.GetHashCode() and feeds the result into the hash state
hc.Add(b); // Calls b.GetHashCode() and feeds the result into the hash state
return hc.ToHashCode(); // Finalizes the hash state, truncates it to an int, resets the internal state and returns the int

рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╣реА рдЖрдВрддрд░рд┐рдХ рд╣реИрд╢ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдлреАрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣реИрд╢ рдХреЛ рдЕрдВрдд рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ

рдореИрдВрдиреЗ рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╕рднреА рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЗрдирд▓рд╛рдЗрди рдХрд░рддрд╛ рд╣реВрдВ ( new HashCode() рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдВрдпреБрдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ)ред

@morganbr. рдореБрд░рдореБрд░3 рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди + рдереНрд░реВрдкреБрдЯ рдкрд░реАрдХреНрд╖рдг: https://gist.github.com/tannergooding/89bd72f05ab772bfe5ad3a03d6493650

MurmurHash3 рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: https://github.com/aappleby/smhasher/wiki/MurmurHash3 , рд░реЗрдкреЛ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдордЖрдИрдЯреА рд╣реИ

xxHash32 (BSD-2 рдХреНрд▓реЙрдЬ - https://github.com/Cyan4973/xxHash/blob/dev/xxhash.c) рдФрд░ SpookyHash (рдкрдмреНрд▓рд┐рдХ рдбреЛрдореЗрди - http://www.burtleburtle.net/bob/hash) рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ /spooky.html) рд╡реЗрд░рд┐рдПрдВрдЯ

@tannergooding рдлрд┐рд░ рд╕реЗ, рд╣реИрд╢ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ [рдПрдХ рд▓реЗрдЦ рдкрдврд╝рдирд╛] [рез] рдЬрд┐рд╕рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореБрд░рдореБрд░ рдбреАрдУрдПрд╕-рдкреНрд░рддрд┐рд░реЛрдзреА рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЪреБрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред

@jamesqo , рдореИрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рднреЗрджреНрдпрддрд╛ рдореБрд░рдореБрд░ 2 рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рди рдХрд┐ рдореБрд░рдореБрд░ 3 рдкрд░ред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдо рд╕реА # рдХреЗ рд▓рд┐рдП рдереНрд░реВрдкреБрдЯ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╡рд┐рддрд░рдг рдФрд░ рдЕрдиреНрдп рдЧреБрдг рдХрд╛рдлреА рдкреНрд░рд╕рд┐рджреНрдз рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреМрди рд╕рд╛ рд╣реИ

рдУрд╣, рд▓реЗрдЦ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рднреВрд▓ рдЧрдП: http://emboss.github.io/blog/2012/12/14/breaking-murmur-hash-flooding-dos-reloaded/ред

@tannergooding рдареАрдХ рд╣реИред рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ: +1:

@tannergooding , рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдореБрд░рдореБрд░ 3 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рд╕рд╣реА рдФрд░ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рдЕрдиреБрдХреВрд▓рд┐рдд рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдпреБрдХреНрдд рд╡реИрд▓реНрдпреВ рдФрд░ рдореБрд░рдореБрд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рджреЛрдиреЛрдВ 32 рдмрд┐рдЯ рд╣реИрдВ? рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдХреВрд▓рди рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдХреЗ рдХреБрдЫ рднреНрд░рдо рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рд╢рд╛рдпрдж рдкреВрд░реНрдг рдорд╛рдк рдореЗрдВ рдХреЛрдИ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдирд╣реАрдВ рдбрд╛рд▓реЗрдВрдЧреЗ):

  • рдЬреЛрдбрд╝рдирд╛рдЕрднреА рднреА рдХрдВрдмрд╛рдЗрдирд╡реИрд▓реНрдпреВ рдХреЛ рд╡реИрд▓реНрдпреВ 1 рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдкрд╣рд▓реЗ рдХрдВрдмрд╛рдЗрдирд╡реИрд▓реНрдпреВ рдХреЙрд▓ рдХреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП
  • ToHashCode рдХреЛ _bytesCombined рдФрд░ _combinedValue рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЗрд╕ рдмреАрдЪ, рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рддрд░рд╕ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░реЗ рд▓рд┐рдП (field1, field2, field3).GetHashCode() рдорд╛рдзреНрдпрдо рд╕реЗ GetHashCode рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдмреБрд░рд╛ рд╣реИ?

@ jnm2 , ValueTuple рд╣реИрд╢ рдХреЛрдб рдХреЙрдореНрдмрд┐рдирд░ рдЖрдкрдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рд╣реИрд╢ рдХреЛрдб рдореЗрдВ рдХреНрд░рдо рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ (рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╣рд╛рд▓ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ)ред рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рдЕрднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреА рд╣реИ, рдЖрдк рд╢рд╛рдпрдж рдзреНрдпрд╛рди рди рджреЗрдВред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлрд╝реАрд▓реНрдб рдпрд╛ рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛ рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреА рд╣реИ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдВрддрд┐рдо рдлрд╝реАрд▓реНрдб рдХреА рдПрдиреНрдЯреНрд░реЙрдкреА рдХрд╛ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯрдХрд░рд╛рд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдлрд╝реАрд▓реНрдб рдмреВрд▓ рдпрд╛ рдЫреЛрдЯрд╛ рдЗрдВрдЯ рд╣реИ, рддреЛ рдЖрдк 'рд╢рд╛рдпрдж рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯрдХрд░рд╛рд╡ рд╣реЛрдВрдЧреЗ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЧрд╛рдЗрдб рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред

ValueTuple рдЙрди рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рднреА 0 рд╣реИрдВред

рдПрдХ рддрд░рдл рдзреНрдпрд╛рди рджреЗрдВ, рдореБрдЭреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдХрд╛рдо) рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХрдм рд╡рд╛рдкрд╕ рд▓реЗ рдкрд╛рдКрдВрдЧрд╛ред

рддреЛ рдЕрдЧрд░ рдпрд╣ рд╕рдВрд░рдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЯреБрдкрд▓ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреНрдпреЛрдВ рд╣реИ?

@ jnm2 , рдпрд╣ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд╛рдпрдХ рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдШрдЯрд┐рдпрд╛ рд╣реИрд╢ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреА рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛:
https://github.com/leo-yuriev/t1ha

@arespr рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдо рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕реА # рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@tannergooding рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдореИрдВ Reddit/Twitter рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдПрдХ рд╣реИрд╢ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд░реЗрдбрд┐рдЯ рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рдмрдирд╛рдпрд╛ред https://www.reddit.com/r/csharp/comments/6qsysm/looking_for_hash_expert_to_help_net_core_team/?ref=share&ref_source=link

@jamesqo , рдореЗрд░реА рдкреНрд▓реЗрдЯ рдореЗрдВ рдХреБрдЫ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реЗ 3 рд╕рдкреНрддрд╛рд╣ рдХреЗ рднреАрддрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рд╕рд╛рде рд╣реА, рд╡рд░реНрддрдорд╛рди рдорд╛рдк рд╕реАрдорд┐рдд рд╣реЛрдВрдЧреЗ рдЬреЛ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реА # рдореЗрдВ рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЪреАрдЬ рдмрди рдЬрд╛рддреА рд╣реИ (https://github.com/dotnet/designs/issues/13), рддреЛ рдорд╛рдк рдХреБрдЫ рд╣рдж рддрдХ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ ;)

рд╕рд╛рде рд╣реА, рд╡рд░реНрддрдорд╛рди рдорд╛рдк рд╕реАрдорд┐рдд рд╣реЛрдВрдЧреЗ рдЬреЛ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реА # рдореЗрдВ рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЪреАрдЬ рдмрди рдЬрд╛рддреА рд╣реИ (рдбреЙрдЯрдиреЗрдЯ/рдбрд┐рдЬрд╛рдЗрди # 13), рддреЛ рдорд╛рдк рдХреБрдЫ рд╣рдж рддрдХ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛;)

рдпрд╣ рдареАрдХ рд╣реИ-- рдПрдХ рдмрд╛рд░ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рдиреЗ рдкрд░ рд╣рдо рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рд╣рдореЗрд╢рд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИрд╢ рдХреЛрдб рдХреЛ рдЗрдирдХреИрдкреБрд▓реЗрдЯрд┐рдВрдЧ/рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛рдирд╛ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдХреБрдЫ рдРрд╕рд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рджрд░реНрд╢рди/рд╡рд┐рддрд░рдг рдЯреНрд░реЗрдбрдСрдлрд╝ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реЛред

@jamesqo , рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдореЗрдВ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЦреБрд╢реА рд╣реЛрдЧреА рдЬреЛ рдЗрд╕ рдкрд░ рднреА рд╣реИрд╢ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ - рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдпрд╛ рдбрд┐рдЬрд╝рд╛рдЗрдиреЛрдВ рд╕реЗ рд╕реА # рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХреЗ рдФрд░ рдлрд┐рд░ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдк рдХрд░ рд╕рдХреЗред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЙрдореНрдореАрджрд╡рд╛рд░ рдЪреБрди рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╡рд╣реА рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдо рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдкрд░ рдХрд░рддреЗ рд╣реИрдВ -- рд╢реБрджреНрдзрддрд╛, рдкреНрд░рджрд░реНрд╢рди, рд╕реБрд░рдХреНрд╖рд╛ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдирдорд╕реНрддреЗ! рдореИрдВрдиреЗ рдЕрднреА рдЪрд░реНрдЪрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рд╛ рд╣реИ, рдФрд░ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓рд╛ murmur3-32 PoC рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреМрди рд╕рд╛ BTW рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдХрд┐рд╕реА рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдХреЛ рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ (рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж .Add() рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рднреА рдЫреЛрдбрд╝ рджреЗрдВ ...)

рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░реНрдп рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдореИрдВ xx32, xx64, hsip13/24, рд╕реАрд╣реИрд╢, murmur3-x86/32 (рдФрд░ рдореИрдВрдиреЗ рдКрдкрд░ рд╕реЗ marvin32 impl рдХреЛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛) рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ (рдЕрднреА рддрдХ) рдЕрдбреЙрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб) рд╕рд┐рдк13/24, рд╕реНрдкреВрдХреАрд╡2. рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╢рд╣рд░ рдХреЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрд╕рд╛рди рд▓рдЧрддреЗ рд╣реИрдВред рдЙрд╕ рдЖрдзреЗ-рдЫреЛрдбрд╝реЗ рдЧрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╣реИрд╢рдХреЛрдб рдХреНрд▓рд╛рд╕ рдирд╣реАрдВ рд╣реИ; рд▓реЗрдХрд┐рди рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬреНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ: рдХреЛрдб рдХреЙрдкреА-рдкрд╛рд╕реНрддрд╛, рдЖрдХреНрд░рд╛рдордХ-рдЗрдирд▓рд╛рдЗрди рдХреЗ рдХреИрдВрд╕рд░рдпреБрдХреНрдд рдлреИрд▓рд╛рд╡ рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЬреИрд╕реЗ рдХреНрд░реВрд░-рдмрд▓ рдХреА рдЙрджрд╛рд░ рдорд╛рддреНрд░рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ; рдЕрдВрддрд╣реАрдирддрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рди рд╣реА рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдкрдврд╝рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд░реЗрдл-рдЗрдореНрдкреНрд▓ рдЯреЗрд╕реНрдЯ-рд╡реИрдХреНрдЯрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рднреА рд╡реНрдпрдВрдЬрдирд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ "рдЕрдкреВрд░реНрдг" рдмреЛрд▓ рд░рд╣реЗ рд╣реИрдВред

рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдорджрдж рд╣реИ, рддреЛ рдореБрдЭреЗ рдЕрдЧрд▓реЗ рджреЛ рд╣рдлреНрддреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреЛрдб рдФрд░ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред

@gimpf

рдореИрдВрдиреЗ рдЕрднреА рдЪрд░реНрдЪрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рд╛ рд╣реИ, рдФрд░ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓рд╛ murmur3-32 PoC рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреМрди рд╕рд╛ BTW рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдЦрд░реНрдЪ рди рдХрд░реЗрдВ

рдирд╣реАрдВ, рд▓реЛрдЧ рдЕрднреА рддрдХ Murmur3 рдХрд╛ рдкрдХреНрд╖ рдирд╣реАрдВ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкреНрд░рджрд░реНрд╢рди/рд╡рд┐рддрд░рдг рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реНрдг рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪреБрди рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЛрдИ рдХрд╕рд░ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░реНрдп рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдореИрдВ xx32, xx64, hsip13/24, рд╕реАрд╣реИрд╢, murmur3-x86/32 (рдФрд░ рдореИрдВрдиреЗ рдКрдкрд░ рд╕реЗ marvin32 impl рдХреЛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛) рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ (рдЕрднреА рддрдХ) рдЕрдбреЙрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб) рд╕рд┐рдк13/24, рд╕реНрдкреВрдХреАрд╡2. рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╢рд╣рд░ рдХреЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрд╕рд╛рди рд▓рдЧрддреЗ рд╣реИрдВред

рдЬреА рдмреЛрд▓рд┐рдпреЗ! рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдХреЛрдб рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдпреЛрдЧрджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред рдпрджрд┐ рдЖрдк рд╕рд┐рдЯреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рднреА рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ: рдХреЛрдб рдХреЙрдкреА-рдкрд╛рд╕реНрддрд╛, рдЖрдХреНрд░рд╛рдордХ-рдЗрдирд▓рд╛рдЗрди рдХреЗ рдХреИрдВрд╕рд░рдпреБрдХреНрдд рдлреИрд▓рд╛рд╡ рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЬреИрд╕реЗ рдХреНрд░реВрд░-рдмрд▓ рдХреА рдЙрджрд╛рд░ рдорд╛рддреНрд░рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ; рдЕрдВрддрд╣реАрдирддрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рди рд╣реА рдЕрд╕рдВрд░реЗрдЦрд┐рдд рдкрдврд╝рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд░реЗрдл-рдЗрдореНрдкреНрд▓ рдЯреЗрд╕реНрдЯ-рд╡реИрдХреНрдЯрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рднреА рд╡реНрдпрдВрдЬрдирд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ "рдЕрдкреВрд░реНрдг" рдмреЛрд▓ рд░рд╣реЗ рд╣реИрдВред

рдареАрдХ рд╣реИред рдмрд╕ рдХреЛрдб рдЕрдВрджрд░ рд▓рд╛рдПрдВ, рдФрд░ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдвреВрдВрдв рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдорджрдж рд╣реИ, рддреЛ рдореБрдЭреЗ рдЕрдЧрд▓реЗ рджреЛ рд╣рдлреНрддреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреЛрдб рдФрд░ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдБ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!

@jamesqo рдареАрдХ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдПрдХ рдиреЛрдЯ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

@gimpf рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЬрд╛рддреЗ рд╣реИрдВ рд╣рдореЗрдВ рдЖрдкрдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ (рдЬрдм рддрдХ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!)ред рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рддрдм рддрдХ рдареАрдХ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдЙрддреНрдкрд╛рджрди-рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЬреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдЙрд╕рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЙрдореНрдореАрджрд╡рд╛рд░ рдЪреБрди рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╕реАрд╣рд╛рд╢ рдХреА рдПрдиреНрдЯреНрд░реЙрдкреА рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХрд░рддреА рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрд╕ рдкрд░ рдХреЛрдИ рд╕рдВрдХреЗрдд рд╣реИ? рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рдкреВрд░реНрдг рдЯреНрд░реЗрдбрдСрдлрд╝ рд╣реИрдВ ... рд╡реЗрдХреНрдЯрд░рдХрд░рдг рддреЗрдЬрд╝ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓рд░ рдЕрдВрдХрдЧрдгрд┐рдд рдзреАрдорд╛ рд▓рдЧрддрд╛ рд╣реИред

@morganbr рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреАрдЬрд╝рд░ рддреИрдпрд╛рд░ рд╣реИред

SeaHash рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ : рдирд╣реАрдВ, рдореБрдЭреЗ рдЕрднреА рддрдХ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ; рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ SMHasher рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдХрдо рд╕реЗ рдХрдо рд▓реЗрдЦрдХ рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ (рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЪреЗрдХрд╕рдо рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛), рдФрд░ рдпрд╣ рднреА рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдорд┐рд╢реНрд░рдг рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдПрдВрдЯреНрд░реЙрдкреА рдлреЗрдВрдХ рджрд┐рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред

рд╣реИрд╢ рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ : рдкреНрд░реЛрдЬреЗрдХреНрдЯ Haschisch.Kastriert , рд╡рд┐рдХреА рдкреЗрдЬ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо xx32, xx64, hsip13, hsip24, marvin32, sea рдФрд░ murmur3-32 рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред

рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреЗрддрд╛рд╡рдиреА:

  • рдпрд╣ рдХрдо рд╕рдЯреАрдХрддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдмрд╣реБрдд рддреЗрдЬрд╝ рдмреЗрдВрдЪ рдереАред
  • рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рджрд╛рд╡реЗрджрд╛рд░ рдЕрднреА рднреА рдЧрд╛рдпрдм рд╣реИрдВред рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдРрд╕реА рдмрд╛рдд рдПрдХ рд╕рдордЭрджрд╛рд░ .Add() рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рдПрдЧреА) рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • SeaHash рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдкрд╣рд▓реА рдореБрд▓рд╛рдХрд╛рдд рдХрд╛ рдкреНрд░рднрд╛рд╡:

  • рдмрдбрд╝реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, xx64 рд╕реВрдЪреАрдмрджреНрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реИ (рд▓рдЧрднрдЧ 3.25 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рдЪрдХреНрд░, рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рдпрд╛ рдореЗрд░реА рдиреЛрдЯрдмреБрдХ рдкрд░ 9.5 GiB/s)
  • рдЫреЛрдЯреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди murmur3-32, рдФрд░ (рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ) рд╕реАрд╣рд╛рд╢ рдХрд╛ рдХрд┐рдирд╛рд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рд╕реАрд╣рд╛рд╢ рджреНрд╡рд╛рд░рд╛ рдЕрднреА рддрдХ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
  • HashSet<> рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП "рдмреЗрдВрдЪрдорд╛рд░реНрдХ" рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рдорд╛рдк рддреНрд░реБрдЯрд┐ рдХреЗ рднреАрддрд░ рд╣реИ (рдореИрдВрдиреЗ рдмрдбрд╝реЗ рдЕрдВрддрд░ рджреЗрдЦреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдмрд╛рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ)
  • рд╣реИрд╢-рдХреЛрдб рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╕рдордп, рдмрдбрд╝рдмрдбрд╝рд╛рд╣рдЯ -3 рдП рдкреАрдУрд╕реА рд▓рдЧрднрдЧ 5 рд╕реЗ 20 рдЧреБрдирд╛ рддреЗрдЬ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рд╣реИ
  • рд╕реА # рдореЗрдВ рдХреБрдЫ рд╕рд╛рд░ рддрддреНрд╡ рдмрд╣реБрдд рдорд╣рдВрдЧреЗ рд╣реИрдВ; рдЬреЛ рд╣реИрд╢-рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╖реНрдЯрдкреНрд░рдж рдмрдирд╛рддрд╛ рд╣реИред

рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ред

@gimpf , рдпрд╣ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╢реБрд░реБрдЖрдд рд╣реИ! рдореИрдВрдиреЗ рдХреЛрдб рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рдореЗрд░реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рд╣реИрдВред

  1. рдЖрдкрдХрд╛ рдкрд░рд┐рдгрд╛рдо @tannergooding рдХреЗ Murmur3a рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА 5x рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ SimpleMultiplyAdd рджрд┐рдЦрд╛ред рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрд░рдореБрд░ рдХреЗ рдкрд╛рд╕ рдЧреБрдгрд╛ + рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрд╛рдо рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдШреБрдорд╛рдирд╛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рддреЗрдЬ рдСрдкрд░реЗрд╢рди рд╣реИ)ред рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдореБрд░рдореБрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рд░рдЦрддреЗ рд╣реИрдВ?
  2. 1, 2, рдФрд░ 4 рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдкреАрдЖрдИ 8 рддрдХ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рднреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдпрд╛ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреЛрд╣рд░рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ?
  3. рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдк X64 рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рд╣рдореЗрдВ рдЕрдкрдирд╛ X64 рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо X86 рдФрд░ X64 рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА X86 рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ? (рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░, рд╣рдореЗрдВ рдПрдЖрд░рдПрдо рдФрд░ рдПрдЖрд░рдПрдо 64 рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

рдЖрдкрдХреЗ рд╣реИрд╢рд╕реЗрдЯ рдкрд░рд┐рдгрд╛рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рдпрджрд┐ рд╡реЗ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рддреЗрдЬ рд╣реИрд╢ рд╕рдордп рдкрд░ рдмреЗрд╣рддрд░ рдПрдиреНрдЯреНрд░реЙрдкреА рдкрд╕рдВрдж рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓рд╛ рд╣реИред

@morganbr рдпрд╣ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдЕрдзрд┐рдХ рдЪрд╛рд▓реВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдЧрддрд┐ рд╕реАрдорд┐рдд рд╣реИред

рдЖрдкрдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

  1. рдЖрдкрдХрд╛ рдкрд░рд┐рдгрд╛рдо @tannergooding рдХреЗ Murmur3a рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА 5x рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ SimpleMultiplyAdd рджрд┐рдЦрд╛ред рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ ...

рдореИрдВ рдЦреБрдж рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдПрдХ рдХреЙрдкреА/рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐ рдереА, SimpleMultiplyAdd рд╣рдореЗрд╢рд╛ рдЪрд╛рд░ рдорд╛рдиреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдХрд░ рд░рд╣рд╛ рдерд╛...

рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдореБрд░рдореБрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рд░рдЦрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдпрд╛рдж рдЖрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .NET рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред рдореИрдВрдиреЗ рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдХрдВрдмрд╛рдЗрди-рд╕реНрдЯрд╛рдЗрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ wrt рд╣реИрд╢-рдХреЛрдб рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░ _much_ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдмрд╣реБрдд рдзреАрдореЗ рд╣реИрдВ; рдЖрдЧреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ .NET рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реИ; рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рджреЛ рдХреЗ рдХрд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рдВрднрд╡рддрдГ рдРрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ рдЬреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИрдВред

  1. рез, реи, рдФрд░ рек рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдкреАрдЖрдИ рео рддрдХ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдХрдВрдмрд╛рдЗрди-рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдврд╝рд╛ рджрд┐рдП рд╣реИрдВред рдЙрд╕ рдореЛрд░реНрдЪреЗ рдкрд░ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВред

  1. рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдк X64 (...) рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА X86 рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ?

рдпрд╣ рдПрдХ рдмрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ .NET рдорд╛рдирдХ рдХреЛ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ред рдЕрдм рдореИрдВ рдирд┐рд░реНрднрд░рддрд╛-рдирд░рдХ рдореЗрдВ рд╣реВрдВ, рдФрд░ рдХреЗрд╡рд▓ .NET Core 2 рдФрд░ CLR 64bit рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдореМрдЬреВрджрд╛ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд▓реЗрддрд╛ рд╣реВрдВ рддреЛ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ v2.1 рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдмрдирд╛рдПрдЧрд╛?

@gimpf рдЖрдкрдиреЗ

@jamesqo рдореИрдВрдиреЗ рдХреБрдЫ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рддрдп рдХрд┐рдП рд╣реИрдВ рдЬреЛ рдЕрдЬреАрдм рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдкрд▓рдмреНрдз рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рд╕реВрдЪреА рдореЗрдВ City32, SpookyV2, Sip13 рдФрд░ Sip24 рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИред рдШреВрдВрдЯ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рддреЗрдЬрд╝ рд╣реИрдВ (xx64 рдХреЗ рдереНрд░реВрдкреБрдЯ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖), рд╕рд┐рдЯреА рдФрд░ рд╕реНрдкреВрдХреА рдирд╣реАрдВ рд╣реИрдВ (рд╕реАрд╣реИрд╢ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдпрд╣реА рд╕рдЪ рд╣реИ)ред

рд╣реИрд╢-рдХреЛрдб рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, Murmur3-32 рдЕрднреА рднреА рдПрдХ рдЕрдЪреНрдЫреА рд╢рд░реНрдд рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рддрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рдиреА рд╣реИред

рдПрдХ рдЕрдиреНрдп рдиреЛрдЯ рдкрд░, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ (.Add ()) рдореЗрдВ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдХреБрдЫ рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рднреА рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ рдХрд┐ рдЗрд╕реЗ рд╢реБрд░реБрдЖрдд рд╕реЗ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдпрджрд┐ .Add() рднрд╛рдЧ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣реИрд╢-рдХреЙрдореНрдмрд┐рдирд░ рдПрдХ рдмреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ tg рдХреЗ рдХреЙрдореНрдмрд┐рдирд░ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ, рдПрдХ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рдг-рд╕реВрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛, рдФрд░ рдЕрдВрдд рдХрд░рдирд╛ред рдЪреВрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд░ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдШрдВрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рджрд░реНрд╢рди-рдЕрдиреБрдХреВрд▓рди рдХреБрдЫ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реЛрдирд╛ рдЪрдврд╝рд╛рдпрд╛ рд╣реБрдЖ рд╕рдВрд╕реНрдХрд░рдг рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИ ...

@gimpf , рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░рд┐рдгрд╛рдо рддрд╛рд▓рд┐рдХрд╛ рдЖрд╕рд╛рди рд╣реИ рддрд╛рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВ?

@morganbr рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдЕрдкрдбреЗрдЯ рдХрд░

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ .NET Core 2 рдкрд░ рдХреЗрд╡рд▓ 64 рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред рдЙрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП, City64 w/o рдмреАрдЬ рд╕рднреА рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╣реИред рдмреАрдЬ рдХреЛ рдорд┐рд▓рд╛рдХрд░ XX-32 рдХреЛ рдореБрд░рдореБрд░-3-32 рд╕реЗ рдмрд╛рдВрдз рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдпреЗ рд╡рд╣реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ рдЬрд┐рдирдХреА рдкреНрд░рддрд┐рд╖реНрдард╛ 32 рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реЛрдиреЗ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рднреА рд╕рд╣реА рд╣реИред рдкрд░рд┐рдгрд╛рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ Sea рдФрд░ SpookyV2 рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдзреАрдореЗ рд▓рдЧрддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рд╣реИрд╢-рдХреЛрдб-рдХреЙрдореНрдмрд┐рдирд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрд╢-рдбреЙрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдХрд┐рддрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣реИрд╢ рдХреЛ рджреГрдврд╝рддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрдпреЛрдЧреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ 32 рдмрд┐рдЯ рдмреАрдЬ рдХреЗ рд╕рд╛рде XOR'd рдПрдХ рдмрд╛рд░ рд╢рд╣рд░ 64 рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗрд╡рд▓ рд╣реИрд╢ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╣реИ (рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣реИрд╢-рдХреЛрдб рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдбреНрд░реЙрдк-рдЗрди рд╣реИрд╢рд░ рд╣реЛ), рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ OTOH рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ Sip13 рдЖрдорддреМрд░ рдкрд░ XX-32 (64 рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 50% рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди 32 рдмрд┐рдЯ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рднрд┐рдиреНрди рд╣реЛрдЧрд╛ред

рдкрддрд╛ рдирд╣реАрдВ рдпрд╣ corefx рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ LegacyJit 32bit (w/FW 4.7) рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝реЗ рд╣реИрдВред

рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдзреАрдореЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, 56 рдПрдордЖрдИрдмреА/рдПрд╕ рдмрдирд╛рдо 319 рдПрдордЖрдИрдмреА/рдПрд╕ рдкрд░ рдореИрдВ рд╣рдВрд╕ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реВрдВ (рд╡рд╣ рд╕рд┐рдк рд╣реИ, рдЗрд╕рдореЗрдВ рд░реЛрдЯреЗрдЯ-рд▓реЗрдлреНрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЧреБрдо рд╣реИ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬрдирд╡рд░реА рдореЗрдВ рдЕрдкрдирд╛ .NET рд╣реИрд╢-рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреНрдпреЛрдВ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛ ...

рддреЛ, RyuJit-32bit рдЕрднреА рднреА рдЧрд╛рдпрдм рд╣реИ, рдФрд░ (рдЙрдореНрдореАрдж рд╣реИ) рдмрд╣реБрдд рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди LegacyJit-x86 рдХреЗ рд▓рд┐рдП, Murmur-3-32 рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреАрдд рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ City-32 рдФрд░ xx-32 рд╣реА рдХрд░реАрдм рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдореБрд░рдореБрд░ рдХрд╛ рдЕрднреА рднреА 0.6 рд╕реЗ 2 рдЬреАрдмреА/рдПрд╕ (рдЙрд╕реА рдорд╢реАрди рдкрд░) рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ 0.4 рд╕реЗ 1.1 рдЬреАрдмреА/рдПрд╕ рдкрд░ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╕рд╣реА рдмреЙрд▓рдкрд╛рд░реНрдХ рдореЗрдВ рд╣реИред

рдореИрдВ рдЖрдЬ рд░рд╛рдд рдЕрдкрдиреЗ рдХреБрдЫ рдмреЙрдХреНрд╕ рдкрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ (Ryzen, i7, Xeon, A10, i7 Mobile, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрдиреНрдп)ред

@tannergooding @morganbr рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдФрд░ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдкрдбреЗрдЯред

рдкрд╣рд▓реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг:

  • рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдп рдХрд┐рдП рдЬреЛ рдЧрд▓рдд рд╣реИрд╢ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣реЗ рдереЗред
  • рдирд┐рд░рдВрддрд░ рддрд╣ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реВрдЯ рдЕрдм рдЕрдзрд┐рдХ рдореЗрд╣рдирдд рдХрд░рддрд╛ рд╣реИред City64 рдЕрддрд┐рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдерд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдЕрддреАрдд рдореЗрдВ рдмрдбрд╝рдмрдбрд╝рд╛рд╣рдЯ-3-32 рдерд╛)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рд╣рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИрдВред

рд╕реБрдХреВрди рднрд░реА рдмрд╛рддреЗрдВ:

  • рдХреЙрдореНрдмрд┐рдирд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рд╕рднреА 1 рд╕реЗ 8 рддрд░реНрдХ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ xx/рд╢рд╣рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  • рдЯреЗрд╕реНрдЯ рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЙрдиреНрд╣реЗрдВ рднреА рдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдХрдИ рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рд╡рд╛рд▓реЗ рдирд┐рдореНрди-рдмрд╛рдЗрдЯ рд╕рдВрджреЗрд╢ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдорд╛рдк рд░реБрдЪрд┐ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЕрдиреЗрдХ рд▓рдХреНрд╖реНрдпреЛрдВ (рдХреЛрд░ рдмрдирд╛рдо рдкрд░рд┐рд╡рд╛рд░ рдХрд▓реНрдпрд╛рдг) рдХреЗ рд▓рд┐рдП рд╕рд░рд▓реАрдХреГрдд рд░рдирд┐рдВрдЧ рдмреЗрдВрдЪрдорд╛рд░реНрдХред

"рдЦрд╛рд▓реА" (рд╢реБрджреНрдз рдУрд╡рд░рд╣реЗрдб) рдФрд░ "рдЧреБрдгрд╛-рдЬреЛрдбрд╝" (рдкреНрд░рд╕рд┐рджреНрдз SO рдЙрддреНрддрд░ рдХрд╛ рдЧрддрд┐-рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг) рд╕рд╣рд┐рдд рд╣реИрд╢-рдХреЛрдб рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдореБрдЦ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рд╕реВрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

bin\Release\net47\Haschisch.Benchmarks.Net47.exe -j:clr_x86 -j:clr_x64_legacy -j:clr_x64 -j:core_x64 -- CombineHashCode --allcategories=prime

(_32 рдмрд┐рдЯ рдХреЛрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░реАрд░рд┐рд▓реАрдЬ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдбреЙрдЯрдиреЗрдЯ (рдпрд╛ рд╢рд╛рдпрдж 32 рдмрд┐рдЯ-рдХреЗрд╡рд▓ рд╕реЗрдЯ-рдЕрдк рдкреНрд▓рд╕ рдХреЛрд░ рдЖрдзрд╛рд░рд┐рдд рдмреЗрдВрдЪ-рд░рдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдлрд┐рд░ рдЗрд╕реЗ -j: core_x86, рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)_

рдкрд░рд┐рдгрд╛рдо : рд╕рднреА рдмрдЧ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж, xx32 рдореЛрдмрд╛рдЗрд▓ рд╣реИрд╕рд╡реЗрд▓ i7 рдкрд░ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ "рддреНрд╡рд░рд┐рдд" рд░рди рдореЗрдВ, рд╕рднреА рдУрд╡рд░рд▓реЛрдб w/64 рдмрд┐рдЯ RyuJIT рдХреЗ рд▓рд┐рдП рдЬреАрддрддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╕рд┐рдк рдФрд░ рдорд╛рд░реНрд╡рд┐рди32 рдХреЗ рдмреАрдЪ, рд╕рд┐рдк-1-3 рд╣рдореЗрд╢рд╛ рдЬреАрддрддрд╛ рд╣реИред рд╕рд┐рдк-1-3 xx32 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 4 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИ, рдЬреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЖрджрд┐рдо рдорд▓реНрдЯреАрдкреНрд▓-рдРрдб рдХреЙрдореНрдмрд┐рдирд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 2 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИред 32 рдмрд┐рдЯ рдХреЛрд░ рдкрд░рд┐рдгрд╛рдо рдЕрднреА рднреА рдЧрд╛рдпрдм рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХрдореЛрдмреЗрд╢ рдПрдХ рд╕реНрдерд┐рд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХрдбреЙрдЯрдиреЗрдЯ рд░рд┐рд▓реАрдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред

(рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ) рдореИрдВрдиреЗ рд╣реИрд╢-рд╕реЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рддреНрд╡рд░рд┐рдд рд░рди рдЬреЛрдбрд╝рд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдКрдкрд░ рджрд┐рдП рдЧрдП ╬╝-рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдПрдХ рдирдЬрд╝рд░ рджреЗрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рд╢рд╛рдирджрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ @gimpf рдзрдиреНрдпрд╡рд╛рдж! рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдирд┐рд░реНрдгрдп рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЗрд╕ рддрд░рд╣ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реВрдВрдЧрд╛:
рддреЗрдЬ + рдЕрдЪреНрдЫреА рдПрдиреНрдЯреНрд░рд╛рдкреА (рдЧрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз):

  1. xxHash32
  2. City64 (рдпрд╣ рд╢рд╛рдпрдж x86 рдкрд░ рдзреАрдорд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╢рд╛рдпрдж x86 рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛)
  3. рдореБрд░рдореБрд░3рдП

рд╣реИрд╢рдбреЙрд╕ рдкреНрд░рддрд┐рд░реЛрдзреА:

  • рдорд╛рд░реНрд╡рд┐рди32
  • рд╕рд┐рдкрд╣реИрд╢ред рдпрджрд┐ рд╣рдо рдЗрд╕ рдУрд░ рдЭреБрдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╢реЛрдз рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕реНрд╡реАрдХрд╛рд░реНрдпрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Microsoft рдХреЗ рдХреНрд░рд┐рдкреНрдЯреЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдореЗрдВ рдпрд╣ рднреА рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рдкреЗрдкрд░ рд╕рд┐рдк-2-4 рдФрд░ рд╕рд┐рдк-4-8 рдХреЗ рдмреАрдЪ рдХрд╣реАрдВ рд╕реБрдЭрд╛рддрд╛ рд╣реИред

рд╡рд┐рд╡рд╛рдж рд╕реЗ рдмрд╛рд╣рд░ (рдзреАрдорд╛):

  • рдбрд░рд╛рд╡рдирд╛V2
  • рд╕рд┐рдЯреА32
  • xxHash64
    *SeaHash (рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдиреНрдЯреНрд░рд╛рдкреА рдкрд░ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ)

рд╡рд┐рд╡рд╛рдж рд╕реЗ рдмрд╛рд╣рд░ (рдЦрд░рд╛рдм рдПрдиреНрдЯреНрд░рд╛рдкреА):

  • рдЧреБрдгрд╛ рдЬреЛрдбрд╝реЗрдВ
  • рдПрдЪрдПрд╕рдЖрдИрдкреА

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдПрдХ рд╡рд┐рдЬреЗрддрд╛ рдЪреБрдиреЗрдВ, рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдореЗрд░реЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдмрдХреЗрдЯрд┐рдВрдЧ рд╕реЗ рд╕рд╣рдордд рд╣реЛрдВред рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЪреБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реИрд╢рдбреЙрд╕ рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рд▓рд┐рдП 2x рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЧрддрд┐ рд╕реЗ рдЬрд╛рдирд╛ рд╣реИред

@morganbr рдЖрдкрдХрд╛ рд╕рдореВрд╣ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред SipHash рд░рд╛рдЙрдВрдб рдореЗрдВ рдбреЗрдЯрд╛-рдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, Rust рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗ рдЬреАрди-рдлрд┐рд▓рд┐рдк рдСрдорд╛рд╕рди рд╕реЗ рдкреВрдЫрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рд┐рдк-рд╣реИрд╢ w/DJB рд▓рд┐рдЦрд╛ рдерд╛ред рдЙрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣реИрд╢-рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рд╕рд┐рдк-1-3 рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

(рджреЗрдЦреЗрдВ рдкреАрдЖрд░ рд░рд╕реНрдЯ:#33940 рдФрд░ рд╕рд╛рде рдореЗрдВ рдЬрд╛рд░реА рд░рд╕реНрдЯ:#29754 )ред

рдбреЗрдЯрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╕рднреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ xxHash32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдЧрд▓рд╛ рдХрджрдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред @gimpf , рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ?

рд╣реИрд╢рдбреЙрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬрд▓реНрдж рд╣реА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд▓реЗ рд╣реИрд╢рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдорд╛рд░реНрд╡рд┐рди 32 рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдореЗрдВ рд╕рд┐рдкрд╣реИрд╢ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рд╣реЛрдЧрд╛ @gimpf рдФрд░ @tannergooding рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред

@morganbr рдореИрдВ рд╕рдордп рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреАрдЖрд░ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВред рд╕рд╛рде рд╣реА, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ xx32 рдХреЛ рднреА рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕реНрд╡реАрдХреГрддрд┐ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@gimpf , рдЖрдкрдХрд╛ рд╕рдордп рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред

@morganbr рдореИрдВрдиреЗ рдЗрд╕реЗ 5 рдирд╡рдВрдмрд░ рддрдХ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА, рдФрд░ рдпрд╣ рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдЧрд▓реЗ рджреЛ рд╣рдлреНрддреЛрдВ рдореЗрдВ рд╕рдордп рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

@gimpf , рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@terrajobst - рдореБрдЭреЗ рдкрд╛рд░реНрдЯреА рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рдРрдб рд╡рд┐рдзрд┐ рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрд╢рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ(рдЯреА рдорд╛рди);
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрд╢рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ(рдЯреА рдорд╛рди, IEqualityComparerрддреБрд▓рдирд╛рдХрд░реНрддрд╛);

The params code is clearly there for scenarios where you have multiple fields, e.g.

```c#
        public override int GetHashCode() => new HashCode().Add(Name, Surname).ToHashCode();

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджреНрдпрдкрд┐ рдПрдХ рдХрдо рдмреЗрдХрд╛рд░ рд╕рд░рдгреА рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рде:

c# public override int GetHashCode() => new HashCode().Add(Name).Add(Surname).Add(Age).ToHashCode();

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рднреА рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдпрдорд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЗрд╕реЗ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рди рдХрд╣рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░реНрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдХрд╛рд░ params рдЕрдзрд┐рднрд╛рд░ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ? рдпрджрд┐ рдпрд╣ рд╕реБрдЭрд╛рд╡ рдПрдХ рдмреБрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ, рддреЛ params рдЕрдзрд┐рднрд╛рд░ рдЙрд╕реА рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдкрд░ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣, рдФрд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЗрд╖реНрдЯрддрдо рд╣реИрд╢рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╛рд░реЛрд╣ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдПрдХ implicit operator int рднреА DRY рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдХреБрд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВред

@jcdickinson

рдХреНрдпрд╛ рд╣рдо рдРрдб рдореЗрдердб рдХрд╛ рд░рд┐рдЯрд░реНрди рдЯрд╛рдЗрдк рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ?

рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдереА, рдФрд░ рдЗрд╕реЗ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдХрд╛рд░ рдкреИрд░рд╛ рдЕрдзрд┐рднрд╛рд░ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ?

рд╣рдо рдХреЛрдИ рдкреИрд░рд╛ рдУрд╡рд░рд▓реЛрдб рдирд╣реАрдВ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ? рдЗрд╕ рд╡реЗрдмрдкреЗрдЬ рдкрд░ "рдкреИрд░рд╛рдореНрд╕" рдХреЗ рд▓рд┐рдП рдПрдХ Ctrl+F рдХрд░реЗрдВ, рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рд╣реА рдПрдХрдорд╛рддреНрд░ рдРрд╕реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд╣ рд╢рдмреНрдж рдкреЙрдк рдЕрдк рд╣реЛрддрд╛ рд╣реИред

рдПрдХ рдирд┐рд╣рд┐рдд рдСрдкрд░реЗрдЯрд░ int рднреА DRY рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдХреБрд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рднреА рдХрд╣реАрдВ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА...

@jamesqo рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдкреИрд░рд╛ рдУрд╡рд░рд▓реЛрдб

рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ AddRange , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдХреЛрдИ рдХрд░реНрд╖рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@jcdickinson AddRange рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдПрдкреАрдЖрдИ рд╕рдореАрдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рджреЗрдЦреЗрдВ https://github.com/dotnet/corefx/issues/14354#issuecomment-308190321 @terrajobst рджреНрд╡рд╛рд░рд╛):

рд╣рдореЗрдВ рд╕рднреА AddRange рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред Arrays рдХреБрдЫ рд╣рдж рддрдХ рдмрд╣реБрдд рдмрд╛рд░ рджрд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдПрдХ рдмрд╛рд░ рдмрдбрд╝реЗ рд╕рд░рдгреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрдгрдирд╛ рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЙрд▓рд┐рдВрдЧ рд╕рд╛рдЗрдб рдкрд░ рд▓реВрдк рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

@gimpf рдореИрдВ рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкреЙрд▓реАрдлрд┐рд▓реНрдб рдХрд░рддрд╛ рд╣реВрдВ ред рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ xxHash32 рд╡реИрдХреНрдЯрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╡рд╛рдХрд┐рдл рд╣реВрдВ рдХрд┐ рдореИрдВ рддрд┐рд▓ рдХреЗ рдкрд╣рд╛рдбрд╝ рдХреЛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ - рдмреЗрдЭрд┐рдЭрдХ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░реЗрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЦрд┐рд▓рд╛рдл рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рджреЛрд╣рд░рд╛рд╡ рд╣реИред

рдореИрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдм рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХреНрдпреЛрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; рдпрд╣ рдХрд╛рдлреА рдзреАрдорд╛ рд╣реИред

BenchmarkDotNet=v0.10.9, OS=Windows 10 Redstone 2 (10.0.15063)
Processor=Intel Core i7-4800MQ CPU 2.70GHz (Haswell), ProcessorCount=8
Frequency=2630626 Hz, Resolution=380.1377 ns, Timer=TSC
.NET Core SDK=2.0.2
  [Host]     : .NET Core 2.0.0 (Framework 4.6.00001.0), 64bit RyuJIT
  DefaultJob : .NET Core 2.0.0 (Framework 4.6.00001.0), 64bit RyuJIT

рд╣реИрд╢ рдХреЛрдб рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЧреИрд░-рдЗрдирд▓рд╛рдЗрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛; рдПрдХ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдмрдирд╛рдо рдЬреЛрдбрд╝реЗрдВ рдХреЗ релреж рдЖрд╣реНрд╡рд╛рди:

| рд╡рд┐рдзрд┐ | рдорддрд▓рдм | рддреНрд░реБрдЯрд┐ | рдПрд╕рдЯреАрдбреАрджреЗрд╡ | рдЫреЛрдЯрд╛ |
|---------- |-----------:|-----------:|---------:|-------: |
| рдЬреЛрдбрд╝реЗрдВ | 401.6 рдПрдирдПрд╕ | рез.реиремреи рдПрдирдПрд╕ | рез.резреореж рдПрдирдПрд╕ | 1.00 |
| рдЯреИрд▓реА | ренрекрен.рео рдПрдирдПрд╕ | реи.рейреиреп рдПрдирдПрд╕ | реи.резренрео рдПрдирдПрд╕ | 1.86 |

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рдореНрди рдкреИрдЯрд░реНрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

```рд╕реА#
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИрд╢рдХреЛрдб: System.Collections.IEnumerable
{
[EditorBrowsable(EditorBrowsableState.Never)]
[рдЕрдкреНрд░рдЪрд▓рд┐рдд ("рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИред", рддреНрд░реБрдЯрд┐: рд╕рддреНрдп)]
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IEnumerator GetEnumerator () => рдирдпрд╛ NotImplementedException () рдлреЗрдВрдХреЗрдВ;
}

public override int GetHashCode() => new HashCode()
{
    Age, // int
    { Name, StringComparer.Ordinal }, // use Comparer
    Hat // some arbitrary object
}.ToHashCode();

```

рдЗрд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рднреА рд╣реИрдВ:

| рд╡рд┐рдзрд┐ | рдорддрд▓рдм | рддреНрд░реБрдЯрд┐ | рдПрд╕рдЯреАрдбреАрджреЗрд╡ | рдЫреЛрдЯрд╛ |
|--------------- |-----------:|-----------:|---------:|--- ----:|
| рдЬреЛрдбрд╝реЗрдВ | рекрежрел.реж рдПрдирдПрд╕ | реи.резрейреж рдПрдирдПрд╕ | рез.реореореп рдПрдирдПрд╕ | 1.00 |
| рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ | 400.8 рдПрдирдПрд╕ | рек.реореирез рдПрдирдПрд╕ | рек.реиренрек рдПрдирдПрд╕ | 0.99 |

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдПрдХ рд╣реИрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ IEnumerable рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЦреБрд╢ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, Obsolete foreach рдкрд░ рднреА рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА - рдЕрдкрд╡рд╛рдж рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рджреЛрдиреЛрдВ рдореЗрдВ MSIL рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИред

@jcdickinson рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ

рдкреНрд░реЛ-рдЯрд┐рдк: рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ GitHub рдЖрдкрдХреЛ рд░реЗрдкреЛ (500+ рдкреНрд░рддрд┐ рджрд┐рди) рд╕реЗ рд╕рднреА рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдЗрди рдЕрдк рдХрд░ рджреЗрдЧрд╛, рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ "рдиреЙрдЯ рд╡реЙрдЪрд┐рдВрдЧ" рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╕рднреА рдЙрд▓реНрд▓реЗрдЦ рдФрд░ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬреЗрдЧрд╛ред рдЖрдкрдиреЗ рд╕рджрд╕реНрдпрддрд╛ рд▓реАред

@jcdickinson , рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╖реНрдЯрдкреНрд░рдж рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реВрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд▓реЛрдЧ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдЧреЗ)ред рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рд╛рде рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ:

  1. рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдореБрджреНрджрд╛
  2. рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рддрд░реАрдХреЛрдВ рд╕реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╕рдВрд░рдЪрдирд╛ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЧрд▓рддреА рд╕реЗ рдЗрдирдкреБрдЯ рдЦреЛ рджреЗрдиреЗ рдЬреИрд╕реА рдЪреАрдЬрд╝реЗрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
var hc = new HashCode();
var newHc = hc.Add(foo);
hc.Add(bar);
return newHc.ToHashCode();

рдЪреВрдВрдХрд┐ рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡реАрдХреГрдд рд╣реИ (рдФрд░ рдЖрдк рдЗрд╕реЗ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИрдВ), рдореИрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред

@karelz рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ @gimpf рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╡рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реМрдВрдкреЗрдВ ред ( рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдПрдирд╡реАрдПрдо)

@terrajobst рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдВрддрд┐рдо-рдорд┐рдирдЯ API рдЕрдиреБрд░реЛрдзред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ GetHashCode рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИ, HashCode s рдРрд╕реЗ рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рд╡реЗ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдПрдБ рд╣реЛрдВ рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп/рддреБрд▓рдиреАрдп рд╣реЛрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреНрдпрд╛ рд╣рдореЗрдВ Equals рдЕрдкреНрд░рдЪрд▓рд┐рдд рднреА рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

[Obsolete("HashCode is a mutable struct and should not be compared with other HashCodes.", error: true)]
[EditorBrowsable(Never)]
// If this is too harsh, base.Equals() is fine as long as the [Obsolete] stays
public override bool Equals(object obj) => throw new NotSupportedException("HashCode is a mutable struct and should not be compared with other HashCodes.");

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реА Span рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдЧрд░ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ ...

  1. рдореИрдВ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╕рдВрджреЗрд╢ рдореЗрдВ should not , рдпрд╛ may not рдмрдЬрд╛рдп cannot рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
  2. рдмрд╢рд░реНрддреЗ рдЕрдкрд╡рд╛рдж рд░рд╣рддрд╛ рд╣реИ, рдореИрдВ рдЙрд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдореЗрдВ рдбрд╛рд▓реВрдВрдЧрд╛, рдмрд╕ рдЕрдЧрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╛рд╕реНрдЯ рдпрд╛ рдУрдкрди рдЬреЗрдиреЗрд░рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@ Joe4evr рдореЗрд░реЗ рд╕рд╛рде рдареАрдХ рд╣реИ; рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдЕрдкрдбреЗрдЯ рдХрд░ рджреА рд╣реИред рдЙрд╕реА рд╕рдВрджреЗрд╢ рдХреЛ GetHashCode рдЕрдкрд╡рд╛рдж рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░:

public override int GetHashCode() => throw new NotSupportedException("HashCode is a mutable struct and should not be compared with other HashCodes.");

@morganbr рдЖрдкрдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВ

рдХреЛрд░рдПрдлрдПрдХреНрд╕ рдореЗрдВ рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИред

@gimpf рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ рдФрд░/рдпрд╛ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ SpookilySharp nuget рдкреИрдХреЗрдЬ рдХреИрд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдореИрдВ рдХреБрдЫ рд╕рд╛рд▓ рдХреЗ рдард╣рд░рд╛рд╡ рдХреЗ рдмрд╛рдж рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдзреВрд▓ рдЪрдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЦрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред

@JonHanna рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛: https://github.com/gimpf/Haschisch.Kastriert

@ рдЬреЛрдирд╣рдиреНрдирд╛ , рдореБрдЭреЗ рдпрд╣

@morganbr рдРрд╕реЗ рдПрдкреАрдЖрдИ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдордВрдЪ рдХрд╣рд╛рдВ рд╣реЛрдЧрд╛? рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдХрдо рдЖрдо рднрд╛рдЬрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫреЗ рдПрдкреАрдЖрдИ рдХреЛ рдмрдбрд╝реЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рдмреЗрд╣рддрд░ рдЬреЗрдЖрдИрдЯреА wrt рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЙрди рд╕рднреА рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ...

@gimpf рдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрд▓рд╛ред рдбреЙрдЯрдиреЗрдЯ/рдХреЛрд░рдПрдлрдПрдХреНрд╕#25666

@morganbr - рдХреНрдпрд╛ рд╣рдо рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА?

@karelz , рдХреНрдпрд╛ рдЖрдк рдкреИрдХреЗрдЬ/рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде @smitpatel рдХреА рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ .NET рдХреЛрд░ рдХреЗ рджреИрдирд┐рдХ рдирд┐рд░реНрдорд╛рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ - рдореИрдВ рдХрд▓ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдиред Roslyn IDE рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рд╡рд░реНрдЧ/рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб/рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ GetHashCode impl рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд▓реЛрдЧ https://github.com/dotnet/corefx/pull/25013 рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдирдП HashCode.Combine рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЙрд╕ рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрднреА рднреА рдПрдХ GetHashCode рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдзреНрдпрд╛рди рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рд╣рдо рдЬреЛ рдкреНрд░рдкрддреНрд░ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рдЕрд░реНрдерд╛рддреН, рдХреНрдпреЛрдВрдХрд┐ VB рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдУрд╡рд░рдлреНрд▓реЛ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред рд╕рд╛рде рд╣реА, рд╡реАрдмреА рдХреЗ рдкрд╛рд╕ рдХреЛрдб рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдЬрд╛рдВрдЪ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдпрд╛ рддреЛ рдкреВрд░реА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рд╣реИред

рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдореБрдЭреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЗрдВрдкреНрд▓рд╛рдВрдЯ рдХреЛ рдПрдХ рдРрд╕реЗ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдЬреЛ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдлреЙрд░реНрдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реЛрдВрдЧреЗ:

  1. GetHashCode рдореЗрдВ рдПрдХ/рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкреНрд░рддрд┐ рдлрд╝реАрд▓реНрдб/рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдХреЛрдИ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВред
  3. рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИрд╢рд┐рдВрдЧред рд╣рдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдЬрд┐рд╕рдХреА рдЙрдореНрдореАрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИ, рдФрд░ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ a + b + c + d рдпрд╛ a ^ b ^ c ^ d рд╕рд╛рде рдорд┐рд▓рддреА рд╣реИрдВред
  4. рдХреЛрдб рдкрд░ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛/рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд╣реАрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реАрдмреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреБрдЫ рдРрд╕рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

return (a, b, c, d).GetHashCode()

рд▓реЗрдХрд┐рди рдпрд╣ рддрдм System.ValueTuple рдХреЗ рд╕рдВрджрд░реНрдн рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд╕рднреНрдп рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!

--

рдиреЛрдЯ: рд╣рдорд╛рд░рд╛ рдореМрдЬреВрджрд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХреЛрдб рд╣реИ:

        Dim hashCode = -252780983
        hashCode = hashCode * -1521134295 + i.GetHashCode()
        hashCode = hashCode * -1521134295 + j.GetHashCode()
        Return hashCode

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╕реА # рдХреЗ рд▓рд┐рдП рднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрд╕ рдХреЛрдб рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗрд╡рд▓ unchecked { } рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡реАрдмреА рдореЗрдВ рд╡рд╣ рд╕реБрдХреНрд╖реНрдо рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд╕рднреНрдп рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!

рдареАрдХ рд╣реИ, рдЖрдк Tuple.Create(...).GetHashCode() ред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЖрд╡рдВрдЯрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ System.ValueTuple рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ? рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ System.ValueTuple рдкреИрдХреЗрдЬ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдВрдЧрдд рд╣реИ, рд╣реИ рдирд╛?

рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЖрд╡рдВрдЯрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред

рд╣рд╛рдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЖрд╡рдВрдЯрди рдХрд╛ рдХрд╛рд░рдг рди рдмрдиреЗред

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ System.ValueTuple рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрджрд┐ рд╣рдо ValueTuple рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВ рдЬреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднрд╛рд░реА рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реАрдмреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП :) рд▓реЗрдХрд┐рди рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореБрдЭреЗ рджреВрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ :)

@CyrusNajmabadi , рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреЛрдб рдореЗрдВ рдЕрдкрдиреА рд╣реИрд╢ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рддреЛ рд╕реАрдЖрд░рд╕реА 32 рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯреЗрдмрд▓ рд▓реБрдХрдЕрдк рдФрд░ рдПрдХреНрд╕рдУрдЖрд░ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ (рд▓реЗрдХрд┐рди рдЕрдВрдХрдЧрдгрд┐рдд рдирд╣реАрдВ рдЬреЛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ:

  1. CRC32 рдореЗрдВ рдорд╣рд╛рди рдПрдиреНрдЯреНрд░рд╛рдкреА рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд░реЛрд╕рд▓рд┐рди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ)ред
  2. рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ 256 рдПрдВрдЯреНрд░реА рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдХреЛрдб рдХреЛ рдПрдорд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╣реИрд╢рдХреЛрдб рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ XXHash рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@morganbr рджреЗрдЦреЗрдВ https://github.com/dotnet/roslyn/pull/24161

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  1. рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реЛ рддреЛ System.HashCode рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред рдХрд┐рдпрд╛ рд╣реБрдЖред
  2. рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рд╕реА # рдореЗрдВ:
    2рдП. рдпрджрд┐ рдЪреЗрдХ-рдореЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИ: рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред
    2рдмреА. рдпрджрд┐ рдЪреЗрдХ-рдореЛрдб рдореЗрдВ: 'рдЕрдирдЪреЗрдХ {}' рдореЗрдВ рд▓рд┐рдкрдЯреЗ, рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред
  3. рдЕрдиреНрдпрдерд╛, рдЕрдЧрд░ рд╡реАрдмреА рдореЗрдВ:
    3рдмреА. рдпрджрд┐ рдЪреЗрдХ-рдореЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИ: рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред
    3рд╕реА. рдпрджрд┐ рдЪреЗрдХ-рдореЛрдб рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдо рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред ValueTuple: Return (a, b, c, ...).GetHashCode() рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ
    3рдбреА. рдЕрдЧрд░ System.ValueTuple рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдЪреЗрдХ-рдореЛрдб рдореЗрдВ рд╣реИред рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╡реАрдмреА рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ рдХрд┐ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИред

рдпрд╣ '3рдбреА' рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ VB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди ValueTuple рдпрд╛ рд╣рд╛рд▓ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ред

рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ 256 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд▓реБрдХрдЕрдк рддрд╛рд▓рд┐рдХрд╛ рдбрд╛рд▓рдиреА рд╣реЛрдЧреА

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рд┐рдп рд╣реЛрдЧрд╛ :)

рдХреНрдпрд╛ рдЯреЗрдмрд▓-рдЬреЗрдирд░реЗрд╢рди рдХреЛрдб рднреА рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ? рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдпрд╣ рдЬреНрдпрд╛рджрд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрд░реЛрдд рдореЗрдВ рдХрд╣реАрдВ рдЬрд╛рдирд╛ рд╣реИ)ред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИрд╢рдХреЛрдб рд╕реНрд░реЛрдд рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рд░реЛрд╕рд▓рд┐рди (рдЖрдИрдПрд▓ рдХреЗ рд╕рд╛рде) (рдмрд╣реБрдд рд╕рд░рд▓) рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬрдм рд╡реЗ рдХрд┐рд╕реА рд╕рдВрджрд░реНрднрд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ?

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИрд╢рдХреЛрдб рд╕реНрд░реЛрдд рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рд░реЛрд╕рд▓рд┐рди (рдмрд╣реБрдд рд╕рд░рд▓) рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдХрд┐рд╕реА рд╕рдВрджрд░реНрднрд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ?

  1. рдХреНрдпрд╛ рд╣реИрд╢рдХреЛрдб рд╕реНрд░реЛрдд рдХреЛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?
  2. рдореИрдВрдиреЗ рд╣реИрд╢рдХреЛрдб рд╕реНрд░реЛрдд рдХреЛ рд╕реНрдХрд┐рдо рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЧреИрд░ рддреБрдЪреНрдЫ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрд╕ рд╕рднреА рдЧрдбрд╝рдмрдбрд╝реА рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдХрд╛рдлреА рднрд╛рд░реА рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╡реАрдмреА рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдЧрдгрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ :(

рддреЛ, рдХрдо рд╕реЗ рдХрдо, рднрд▓реЗ рд╣реА рд╣рдо рджреЛ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реЛрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛:

```рд╕реА#
var hc1 = (uint)(value1?.GetHashCode() ?? 0); // рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
var hc2 = (uint)(value2?.GetHashCode() ?? 0); // рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

        uint hash = MixEmptyState();
        hash += 8; // can overflow

        hash = QueueRound(hash, hc1);
        hash = QueueRound(hash, hc2);

        hash = MixFinal(hash);
        return (int)hash; // can overflow
Note that this code already has 4 lines that can overflow.  It also has two helper functions you need to call (i'm ignoring MixEmptyState as that seems more like a constant).  MixFinal can *definitely* overflow:

```c#
        private static uint MixFinal(uint hash)
        {
            hash ^= hash >> 15;
            hash *= Prime2;
            hash ^= hash >> 13;
            hash *= Prime3;
            hash ^= hash >> 16;
            return hash;
        }

рдХреНрдпреВрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ:

c# private static uint QueueRound(uint hash, uint queuedValue) { hash += queuedValue * Prime3; return Rol(hash, 17) * Prime4; }

рддреЛ рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ :(

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИрд╢рдХреЛрдб рд╕реНрд░реЛрдд рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рд░реЛрд╕рд▓рд┐рди (рдЖрдИрдПрд▓ рдХреЗ рд╕рд╛рде) (рдмрд╣реБрдд рдХреБрдЫ) рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ

рдЖрдк рдЗрд╕ рдХрд╛рдо рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдЧреНрд░рд╛рд╣рдХ рдХреНрдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдЗрди рд╕рднреА рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдЧрд╛ рдпрджрд┐ .Net рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рддрд╣ рдПрдкреАрдЖрдИ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬреЛ рдмрд┐рдирд╛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ uint рд╕реЗ int32 (рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡реАрдмреА рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдмрд╕ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдмрд┐рдирд╛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдХреНрдпрд╛ рдЯреЗрдмрд▓-рдЬреЗрдирд░реЗрд╢рди рдХреЛрдб рднреА рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рд╕реЛрдЪреЗрдВред рд╡реЗ рд╕рд┐рд░реНрдл рдПрдХ рд╕рднреНрдп GetHashCode рд╡рд┐рдзрд┐ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЙрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЬрд╛рдиреЗ рдФрд░ рдЙрдирдХреЗ рдХреЛрдб рдХреЛ рд╕рд╣рд╛рдпрдХ рдмрдХрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдмреНрд▓реЛрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдпрд╣ рднреА рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИ рдХрд┐ рд╕реА # рдЕрдиреБрднрд╡ рдареАрдХ рд░рд╣реЗрдЧрд╛ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд░рдХреЗ рд▓рдЧрднрдЧ рд╕рд╣реА рдУрд╡рд░рдлрд╝реНрд▓реЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВред рдРрд╕рд╛ рдХреБрдЫ (рдЕрд╡рд╛рдВрдЫрд┐рдд рдФрд░ рдореБрдЭреЗ рд╡реАрдмреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рдкрддрд╛):

Dim hashCode = -252780983
hashCode = (Int32)((Int32)((Unt64)hashCode * -1521134295) + (UInt64)i.GetHashCode())

рдЖрдк рдХреИрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ?

c# (Int32)((Unt64)hashCode * -1521134295)

рдпрд╛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо (int32) рдбрд╛рд▓реА?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣-рдЬрд╛рдВрдЪ рдХрд┐рдП рдЧрдП рд░реВрдкрд╛рдВрддрд░рдг рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдЗрд╕реЗ 32 рдмрд┐рдЯ рддрдХ рдореБрдЦреМрдЯрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

(Int32)(((Unt64)hashCode * -1521134295) & 0xFFFFFFFF)

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ 31 рдмрд┐рдЯреНрд╕, uint32 рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВред рдореИрдХреНрд╕ рднреА рдЗрдВрдЯ 32 рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдкрд░ рдмрд╣ рдЬрд╛рдПрдЧрд╛ :)

рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдмрджрд╕реВрд░рдд... рд▓реЗрдХрд┐рди рд╕рдВрднрд╡ рд╣реИ :) рдЗрд╕ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдХрд╛рд╕реНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдареАрдХред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рдЖрдЬ рд╣рдо рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдореВрд▓ рд╣реИ:

c# hashCode = hashCode * -1521134295 + j.GetHashCode();

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо 64 рдмрд┐рдЯ рдЧрдгрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди "рд╣реИрд╢рдХреЛрдб" рдХреЛ 32 рдмрд┐рдЯреНрд╕ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрдм <largest_32_bit> * -1521134295 + <largest_32_bit> 64 рдмрд┐рдЯ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреЛ рд╣рдо рд╣рдореЗрд╢рд╛ 64 рдмрд┐рдЯреНрд╕ рдореЗрдВ рдЧрдгрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ 32 (рдпрд╛ 32 рдмрд┐рдЯ) рддрдХ рдХреНрд▓реИрдВрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдЕрдЧрд▓рд╛ рд░рд╛рдЙрдВрдб рдУрд╡рд░рдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж!

@MaStr11 @morganbr @sharwell рдФрд░ рдпрд╣рд╛рдВ рд╕рднреАред рдореИрдВрдиреЗ рд╡реАрдмреА рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ:

        Dim hashCode As Long = 2118541809
        hashCode = (hashCode * -1521134295 + a.GetHashCode()) And Integer.MaxValue
        hashCode = (hashCode * -1521134295 + b.GetHashCode()) And Integer.MaxValue
        Return CType(hashCode And Integer.MaxValue, Integer)

рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╡реЗрдХ рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдореЛрдб рдХреЗ рд╕рд╛рде рднреА рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

@CyrusNajmabadi , рдЬреЛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ Int64.Max = Int32.Max*Int32.Max рдФрд░ рдЖрдкрдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЙрд╕рд╕реЗ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реИрдВ) рд▓реЗрдХрд┐рди рдЖрдк рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рдорд╛рд╕реНрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ 31-рдмрд┐рдЯ рд╣реИрд╢ рд╣реИред рдХреНрдпрд╛ рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

@CyrusNajmabadi hashCode рдПрдХ Long рдЬреЛ 0 рд╕реЗ Integer.MaxValue рддрдХ рдХрд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдХреНрдпреЛрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ?

image

рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ- рдореИрдВ рд░реЛрд╕рд▓рд┐рди рдХреЛ рдПрдХ рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╣реИрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ NuGet рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдЖрдк рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рдорд╛рд╕реНрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ 31-рдмрд┐рдЯ рд╣реИрд╢ рд╣реИред рдХреНрдпрд╛ рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдпреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдпреВрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рддреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдпреВрдВрдЯ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕рд╛рдЗрди рдмрд┐рдЯ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╕рдм рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЧрдгрд┐рдд рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 0xffffffff рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд┐рд░реНрдл рдореБрдЦреМрдЯрд╛ рдХрд░рдирд╛ рдареАрдХ рд╣реЛрдЧрд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдиреАрдЪреЗ 32 рдмрд┐рдЯ рд░рдЦреЗрдВред

рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд░реЛрд╕рд▓рд┐рди рдХреЛ рдПрдХ рдЙрдк-рдЗрд╖реНрдЯрддрдо рд╣реИрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ NuGet рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдпреВрдЬрд░реНрд╕ рдЪрд╛рд╣реЗрдВ рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд 'рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛' рд╣реИрд╢ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╣реИред рдпрд╛рдиреА рдЖрдо "x + y + z" рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ рдЬреЛ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ 'рдЗрд╖реНрдЯрддрдо' рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрд╢рд┐рдВрдЧ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ 'рдЗрд╖реНрдЯрддрдо' рдХреНрдпрд╛ рд╣реИ рдЗрд╕рдХреА рдХреЛрдИ рдЕрдЪреНрдЫреА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЬреНрдЮрд╛рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдЯрди рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдордп рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рд╡реИрд╕реЗ-рд╡реИрд╕реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрд╢рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЪрд┐рдВрддрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ:

        Dim hashCode As Long = 2118541809
        hashCode = (hashCode * -1521134295 + a.GetHashCode()).GetHashCode()
        hashCode = (hashCode * -1521134295 + b.GetHashCode()).GetHashCode()
        Return CType(hashCode, Integer)

рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдХрд┐ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреБрд▓рд╛ рд░рд╣рд╛ рд╣реИ .GetHashCode() рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрд┐рдд int64 рдореВрд▓реНрдп рдкрд░ (hashCode * -1521134295 + a.GetHashCode()) ред рдЗрд╕ 64 рдмрд┐рдЯ рдорд╛рди рдкрд░ .GetHashCode рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдЕрдЪреНрдЫреЗ рдЧреБрдг рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣реИрд╢рдХреЛрдб рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рдПрдХ рдХрд╛рдиреВрдиреА int32 рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ рдХрд╛рд╕реНрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддрд╛ рд╣реИ)ред рджреВрд╕рд░рд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд┐рд╕ int64 рдЕрд╕реНрдерд╛рдпреА рдорд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдКрдкрд░реА 32 рдмрд┐рдЯ рдореЗрдВ рдХреЛрдИ рднреА рдореВрд▓реНрдпрд╡рд╛рди рдЬрд╛рдирдХрд╛рд░реА рди рдЦреЛрдПрдВред

@CyrusNajmabadi рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдкреВрдЫ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк HashCode рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрджрд┐ System.HashCode MS nuget рдкреИрдХреЗрдЬ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ Roslyn рдЗрд╕реЗ рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЧреИрд░-рдореМрдЬреВрдж GetHashCode рдЕрдзрд┐рднрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗ рдФрд░ рдЙрд╕реА рдСрдкрд░реЗрд╢рди рдореЗрдВ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рднрд╛рд░реА рдСрдкрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХрд╛ рд╕рд╣реА рд╕рдордп рддрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдИрдбреАрдИ рдЗрд╕рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдЧрд╛ред рдЕрдм рддрдХ рд╣рдордиреЗ рдЕрдкрдиреА рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдпрд╣реА рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд╕реНрд╡рд╕реНрде рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдиреЛрдЯ: рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рднреА рдХрд┐рд╕ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди System.Private.CoreLib.dll рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдкреИрдХреЗрдЬ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдПрдЧрд╛ред рдЕрдиреБрдмрдВрдз System.Runtime.dll рд╣реИред

рдареАрдХред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рддрдм рдорд┐рд▓реЗрдЧрд╛ рдЬрдм рд╡реЗ рд╣рд╛рд▓ рдХреЗ рд▓рдХреНрд╖реНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдХрджрдо рдирд╣реАрдВ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП "рдмрд░рд╛рдмрд░ + рд╣реИрд╢рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ" рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Timovzl picture Timovzl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

omajid picture omajid  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sahithreddyk picture sahithreddyk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bencz picture bencz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

omariom picture omariom  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ