Эквивалент HashCode в. Net Framework - PullRequest
0 голосов
/ 31 марта 2020

При конвертации. NET Базовый проект в. NET Framework, одно замечание - использование Hashcode теперь необходимо преобразовать в нечто эквивалентное. Как можно прочитать, Hashcode указывает c к. NET основные версии и некоторые расширения.

https://docs.microsoft.com/en-us/dotnet/api/system.hashcode?view=dotnet-plat-ext-3.1

Интересно, что было бы достаточно близко с точки зрения использования в. NET Framework, если есть любой встроенный тип объекта.

1 Ответ

0 голосов
/ 01 апреля 2020

РЕДАКТИРОВАТЬ:

System.HashCode доступен в. NET Core тоже. Вы можете использовать HashCode.Combine для этой цели, см .: https://docs.microsoft.com/en-us/dotnet/api/system.hashcode?view=netcore-2.1

var combined = HashCode.Combine("one", "two");

(предыдущий ответ ниже)

Длинный и подробные ответы можно найти здесь: { ссылка }

Если вы просто хотите получить простой ответ, вы можете объединить хеши объектов в новой структуре (кортеж, анонимный класс и т. д.). c) и позвоните GetHashCode(), чтобы получить результат.

например,

public override int GetHashCode() {
    return new { MyField1, MyField2 }.GetHashCode();
}

Если вы ответите на приведенный выше ответ, вы, конечно, можете, если вы хотите сделать его проще (?) создайте общий вспомогательный класс stati c, который сделает всю работу за вас:

 public class MyHashCode
    {
        public static int Hash(params object[] values)
            => CustomHash(1009, 9176, values.Select(v => v.GetHashCode()).ToArray());

        // From answer https://stackoverflow.com/a/34006336/25338
        public static int CustomHash(int seed, int factor, params int[] vals)
        {
            int hash = seed;
            foreach (int i in vals)
            {
                hash = (hash * factor) + i;
            }
            return hash;
        }
    }

и назовите его так:

  public class UnitTest1
    {
        [Fact]
        public void Test1()
        {
            string s1 = "yezz";
            string s2 = "nope";


            var hash = Utils.MyHashCode.Hash(s1, s2);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...