Подходят ли 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

2022-11-02T18:44:07+00:00