Middle
Klassı kolleksiyada açar kimi istifadə etmək üçün nə etmək lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
Klassı kolleksiyada (məsələn, Dictionary<TKey, TValue> içində) açar kimi istifadə etmək üçün, Equals və GetHashCode metodlarını düzgün şəkildə həyata keçirmək lazımdır.
-
Equals(object obj)metodunu yenidən yazmaq:- Cari nümunəni başqa bir obyekt (
obj) ilə müqayisə etmək. obj-innullolmadığından əmin olmaq.obj-in cari nümunə ilə eyni tiplə olduğunu yoxlamaq.- Hər iki obyektin vacib sahələrini və ya xüsusiyyətlərini müqayisə etmək.
- Cari nümunəni başqa bir obyekt (
-
GetHashCode()metodunu yenidən yazmaq:Equals-də istifadə olunan eyni vacib sahələr və ya xüsusiyyətlər əsasında hash kodu yaratmaq.- Əgər
Equalsiki obyekt üçüntrueqaytarırsa, onlarınGetHashCodemetodlarının eyni dəyəri qaytardığından əmin olmaq. - Hash kodlarının bərabər paylanmasını təmin etmək tövsiyə olunur, bu da toqquşmaları azaldır.
-
İstəyə bağlı olaraq
IEquatable<T>-i həyata keçirmək:Equals(T other)tipli metod təqdim edir, bu da boxing-i qarşısını alaraq daha səmərəli ola bilər.
Nümunə:
using System;
using System.Collections.Generic;
public class MyKey
{
public int Id { get; }
public string Name { get; }
public MyKey(int id, string name)
{
Id = id;
Name = name;
}
// Dəyərlər əsasında müqayisə üçün Equals metodunu yenidən yazmaq
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
MyKey other = (MyKey)obj;
return Id == other.Id && Name == other.Name;
}
// `Equals`-də istifadə olunan sahələrdən istifadə edərək GetHashCode-u yenidən yazmaq
public override int GetHashCode()
{
// Tuple istifadə edərək hash kodlarını birləşdiririk
return (Id, Name).GetHashCode();
}
// İstəyə bağlı olaraq IEquatable<T> tətbiqi
public bool Equals(MyKey other)
{
if (other == null)
{
return false;
}
return Id == other.Id && Name == other.Name;
}
}
Bu metodların düzgün şəkildə həyata keçirilməməsi halında, Dictionary standart olaraq identiklik bərabərliyini (referansların müqayisəsi) və GetHashCode-un standart tətbiqini (referansa əsaslanan) istifadə edəcək, bu da açarların dəyərə görə axtarışında kolleksiyanın düzgün işləməməsinə səbəb ola bilər.