Advertisement
CyberN00b

Untitled

Oct 6th, 2022 (edited)
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.39 KB | None | 0 0
  1. class SimpleClass1
  2. {
  3.     public int a;
  4.     public int b;
  5.     public SimpleClass1(int a, int b)
  6.     {
  7.         this.a = a;
  8.         this.b = b;
  9.     }
  10.     public int GetHashCode()
  11.     {
  12.         return this.a ^ this.b;
  13.     }
  14. }
  15.  
  16. class SimpleClass2
  17. {
  18.     public int a;
  19.     public int b;
  20.     public SimpleClass2(int a, int b)
  21.     {
  22.         this.a = a;
  23.         this.b = b;
  24.     }
  25.     public int GetHashCode()
  26.     {
  27.         return ShiftAndWrap(this.a, 2) ^ this.b;
  28.     }
  29. }
  30. class Project
  31. {
  32.     static void Main()
  33.     {
  34.         // создаем 2 класса с указанием значений полей
  35.         // в одном классе поля равны: a = 1; b = 3
  36.         // во втором классе поля равны: a = 3; b = 1
  37.         // получается поля НЕ РАВНЫ ПО ЗНАЧЕНИЯМ ПОЛЕЙ
  38.         // но при этом их хеши РАВНЫ, что является неверным
  39.         SimpleClass1 c1(1, 3);
  40.         SimpleClass1 c2(3, 1);
  41.         Console.WriteLine(c1.GetHashCode() == c2.GetHashCode()); // Output: True --- thats wrong answer
  42.  
  43.         // здесь у нас похожая ситуация, но при вычитании хешей мы сдвигаем поля
  44.         // таким образом получается, что хеши НЕ РАВНЫ, что уже верно
  45.         SimpleClass2 c3(2, 5);
  46.         SimpleClass2 c4(5, 2);
  47.         Console.WriteLine(c3.GetHashCode() == c4.GetHashCode()); // Output: False --- thats correct answer
  48.  
  49.     }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement