LINQ OfType: filtra con eleganze le tue List

LINQ & OfType

Sapevi di potere filtrare in maniera furba le tue liste in base al type che desideri utilizzare? In questo breve articolo desidero mostrarti questa “tecnica avanzata ma per nulla complicata” possibile grazie all’utilizzo di LINQ. Per farlo ho scritto una console C#/ NET8 in modo da ridurre al minimo il codice sorgente. Siete pronti?

Record Type

Prima di mostrarvi come fare penso sia necessario mostrarvi le strutture dei dati che ho creato per l’esempio. Si tratta di tre record con la seguente definizione:

Food

1
public record Food(string name, double price);

Pizza

1
2
public record Pizza(string name, double price, string[] ingredients, bool avaiable) 
  : Food(name, price);

Hamburger

1
2
public record Hamburger(string name, double price) 
  : Food(name, price);

Se non hai mai lavorato coi Record Type ti consiglio di cominciare e non aspettare altro tempo!

LINQ

Ora entriamo nel vivo del contenuto. Cosa dobbiamo fare secondo voi? In primo luogo creare una List ed inserire al suo interno i nostri dati. In un caso non di studio questa List riceverà i valori ad esempio da una sorgente dati.

1
2
3
4
List<Food> items = new();
items.Add(new Pizza("Tomato", 10, new string[]{"Tomato"},true));
items.Add(new Pizza("Ham", 20, new string[] { "Ham" }, true));
items.Add(new Hamburger("Cheese", 20));

Come avrete notato items è una List in grado di contenere Food. Proprio per questo motivo abbiamo potuto inserire sia degli elementi di tipo Pizza che di tipo Hamburger.

Ed ora? Non dovremmo fare altro che applica il seguente filtro per ottenere tutti gli elementi di tipo Pizza

1
var pizzaItems = items.OfType<Pizza>().ToList();

Oppure il seguente per ottenere la lista di Hamburger inseriti.

1
var HamburgerItems = items.OfType<Hamburger>().ToList();

A questo punto avete “carta bianca” su come operare con le due nuove liste appena create.

♻️ Conoscevi questo trucco? Condividilo con amici!