Sobes.tech
Junior — Middle

Hoe wordt de vergelijking van verschillende datastructuren uitgevoerd?

sobes.tech AI

Antwoord van AI

In C# hangt de vergelijking van gegevensstructuren af van het gegevenstype en hoe de vergelijking is geïmplementeerd:

  • Primitieve types (int, double, bool, enz.) worden op waarde vergeleken.
  • Structuren (struct) worden standaard op waarde vergeleken — alle velden worden sequentieel vergeleken.
  • Klassen (class) worden op referentie vergeleken, dat wil zeggen, wordt gecontroleerd of de variabelen naar hetzelfde object wijzen.
  • Om de inhoud van klassen te vergelijken, worden meestal de methoden Equals() en GetHashCode() overschreven of wordt de interface IEquatable<T> geïmplementeerd.
  • Voor collecties kunnen methoden uit System.Linq, zoals SequenceEqual, worden gebruikt.

Voorbeeld van het vergelijken van twee structuren en klassen:

struct PointStruct
{
    public int X, Y;
}

class PointClass
{
    public int X, Y;
    public override bool Equals(object obj)
    {
        if (obj is PointClass other)
            return X == other.X && Y == other.Y;
        return false;
    }
    public override int GetHashCode() => (X, Y).GetHashCode();
}

var a = new PointStruct { X = 1, Y = 2 };
var b = new PointStruct { X = 1, Y = 2 };
Console.WriteLine(a.Equals(b)); // Waar - vergelijking op waarde

var c = new PointClass { X = 1, Y = 2 };
var d = new PointClass { X = 1, Y = 2 };
Console.WriteLine(c.Equals(d)); // Waar - dankzij overschrijving
Console.WriteLine(ReferenceEquals(c, d)); // Onwaar - verschillende objecten