Tag Archives: enumerable

.NET 6 Yenilikleri – Enumerable içerisinde *By metodları

.NET 6 ile gelen yeniliklerden biri de Enumerable içerisinde gelen *By extension metodları.

.NET 5 ve öncesi, tanımladığımız custom bir yapı için compare kısmını yaparken o yapıyı IComparable interface’inden türetip CompareTo metodunu kullanıyorduk klasik bir şekilde.

Örneğin;

record Product : IComparable
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int CompareTo(object obj)
    {
        var person = (Product)obj;
        return decimal.Compare(Price, person.Price);
    }
}

Bu şekilde yaptığımız için karşılaştırma yapan metodları bu custom yapı için kullanabiliyorduk.

var products = new List of Product ();
products.Add(new Product { Name = "P1", Price = 15 });
products.Add(new Product { Name = "P2", Price = 5 });
products.Add(new Product { Name = "P3", Price = 25 });

var cheapest = products.Min();
Console.WriteLine(cheapest); // Product { Name = P2, Price = 5 }

var mostExpensive = products.Max();
Console.WriteLine(mostExpensive); // Product { Name = P3, Price = 25 }

Bu *By metodları ile, artık parametre verdiğimiz “keySelector” ile hangi özelliğe göre karşılaştırma yapılacağını belirtebiliyoruz. Bu nedenle bu custom yapıyı IComparable interface’inden türetmeye, doğal olarak ta CompareTo metodunu yazmamıza ihtiyacımız kalmıyor.

var cheapest = products.MinBy(p => p.Price);
var mostExpensive = products.Max(p => p.Price);

.NET 6 ile hayatımıza giren yeni metodlar şunlar; MaxBy, MinBy, DistinctBy, UnionBy, IntersectBy ve ExceptBy.

Kaynak: Announcing .NET 6 — The Fastest .NET Yet

https://devblogs.microsoft.com/dotnet/announcing-net-6/#system-linq-distinctby-unionby-intersectby-exceptby