Подходят ли ValueTuples в качестве ключей словаря?
Являясь типом значения, хэш c# для ValueTuple
следует реализации по c-sharp умолчанию, которая основана dictionaries на значениях членов:
Если c#.net типы значений не переопределяют c#-language GetHashCode, ValueType.GetHashCode метод dictionary базового класса использует visual-c# отражение для вычисления dict хэш-кода на основе значений visual-c# полей типа. Другими словами, типы .cs-file значений поля которых имеют visual-c# одинаковые значения, имеют visual-c# одинаковые хэш-коды.
Кортежи valuetuple изменяемы, но поскольку они csharp копируются по значению, вы можете безопасно использовать c#-language их в качестве ключей словаря. Проблема dictionaries может заключаться в том, что dictionary вы используете переменную c#.net типа кортеж, используете c#-language эту переменную в Dictionary.Add
, затем c#-language изменяете эту переменную c-sharp и пытаетесь получить доступ dictionaries к связанному значению из c#.net словаря, используя ту же dict переменную, что и ключ. В map этом случае вы не найдете csharp его в словаре.
Эквивалентная c-sharp структура будет иметь вид:
MyStruct : struct
{
public int A;
public int B;
}
c#
dictionary
valuetuple
Подходят ли ValueTuples в качестве ключей словаря?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.