Назад к вопросам
Middle
164
questionbank
Какие типы данных можно использовать в качестве ключей для словаря (Dictionary) в C#?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Любые типы данных, для которых корректно реализованы методы Equals и GetHashCode.
- Value types (структуры): По умолчанию реализуют
EqualsиGetHashCodeна основе полей. - Reference types (классы): По умолчанию используют сравнение ссылок и хэш-код на основе адреса объекта. Для использования в качестве ключа нужно переопределить
EqualsиGetHashCodeтак, чтобы они сравнивали по значению. - Immutable types (вроде
string): Являются хорошими кандидатами, так как их значение не меняется, что гарантирует постоянство хэш-кода.
// Класс, который можно использовать как ключ, если переопределить Equals и GetHashCode
public class MyKey
{
public int Id { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
// Проверка на null и приведение типа
if (obj == null || GetType() != obj.GetType())
{
return false;
}
MyKey other = (MyKey)obj;
// Сравнение по значению полей
return (Id == other.Id) && (Name == other.Name);
}
public override int GetHashCode()
{
// Генерация хэш-кода на основе полей
// Используем Tuple.GetHashCode() или побитовые операции
return (Id, Name).GetHashCode();
}
}