Generiska klasser
En generisk klass är en klass där någon datatyp inte är fördefinierad, utan deklareras i koden. En lista där värdena som lagras är int
har till exempel datatypen List<int> och en lista med strings är en List<string>.
Det som skrivs mellan <> i en generisk klass kallas för en typ-parameter.
Samlingar
C# innehåller ett antal färdiga generiska klasser i form av "samlingar" – helt enkelt objekt som samlar flera objekt eller värden av andra datatyper. Till exempel kan en samling innehålla integers, strings eller instanser av en klass.
Några exempel på generiska samlingar är List, Queue, PriorityQueue, Stack, HashSet och Dictionary.
OBS: För att dessa ska fungera om du kör äldre versioner av dotnet (t.ex. dotnet 5), så behöver du skriva in följande högst upp i din kod:
Gemensamt för samlingar
Nedanstående finns i de flesta samlingar – några saknas i Dictionary, som är lite av ett specialfall.
Många samlings-datatyper kan också få ytterligare funktionalitet via Linq-metoder.
Count
En property som används istället för Length för att räkna antalet saker i samlingen.
ToList() / ToArray()
Returnerar en lista eller en array som innehåller samma saker som samlingen.
Contains()
Tar emot ett värde. Om värdet finns i samlingen returnerar metoden true, annars false.
Clear()
Rensar bort alla saker som finns i samlingen.
List
Fungerar som arrayer, utom att man inte bestämmer storlek från början utan kan använda bl.a Add och Insert och RemoveAt-metoder för att lägga till, stoppa in och ta bort grejer ur listan när som helst.
När man skapar en lista kan man också direkt lägga in värden genom att ange en array efter parenteserna.
Add()
Lägger till något i listan.
Remove()
Tar bort något från listan. När man tar bort något ur listan
RemoveAt()
Tar bort något från en specifik indexposition i listan.
RemoveAll()
Tar emot en delegate som beskriver ett kriterie. Delegaten tar emot ett objekt eller ett värde av samma datatyp som listan lagrar, och returnerar en bool ifall instansen uppfyller kriteriet. Normalt används ett lambda-uttryck istället för en metod för att uppfylla delegaten.
RemoveAll() tar bort alla element som matchar kriteriet, och returnerar ett int-värde som beskriver hur många som togs bort.
Find()
Tar emot en delegate som beskriver ett kriterie. Delegaten tar emot ett objekt eller ett värde av samma datatyp som listan lagrar, och returnerar en bool ifall instansen uppfyller kriteriet. Normalt används ett lambda-uttryck istället för en metod för att uppfylla delegaten.
Find() returnerar det första föremål (värde eller objekt) i listan som matchar kriteriet. Om inget hittas, returneras null eller defaultvärdet för datatypen (t.ex. 0 för integers).
FindLast()
Fungerar som Find, men kollar igenom listan bakifrån och returnerar därmed det sista föremål som matchar kriteriet.
FindAll()
Fungerar som Find, men returnerar en lista med alla matchande föremål i listan.
FindIndex()
Fungerar som Find, men returnerar index för första matchande föremål.
FindLastIndex()
Fungerar som FindIndex(), men kollar igenom listan bakifrån och returnerar därmed index för det sista föremål som matchar kriteriet.
Queue
Fungerar som en lista, utom att man bara kan lägga till saker längst bak i kön, och ta bort dem längst fram. Detta kallas FIFO, eller First In, First Out.
Enqueue()
Lägger till ett objekt i kön.
Dequeue()
Tar bort och returnerar nästa objekt i kön.
Peek()
Returnerar, men tar inte bort, nästa objekt i kön.
PriorityQueue
Fungerar som en Queue, plus att varje sak som läggs in i kön ges en prioritet. När man sedan kör Dequeue eller Peek så är det objektet med högst prioritet (lägst prioritets-värde) som returneras. När man skapar en PriorityQueue så anger man två datatyper – en för de saker som ska sparas i kön, en som ska användas för att avgöra prioritet. Oftast är den senare bara en int eller annan numerisk datatyp.
Om flera saker har samma prioritet så returneras de i ordning motsvarande en vanlig queue.
Stack
Fungerar som en "hög" – man kan bara lägga till saker högst upp i högen och även bara plocka bort saker från högst upp i högen. Detta kallas FILO, eller First In, Last Out.
HashSet
Saknar indexering, men kan bara innehålla unika objekt – man riskerar inte att råka lägga till samma sak flera gånger.
Dictionary
Fungerar som en lista, utom att man kan använda andra datatyper än ints som index. I Dictionaries använder man ofta ordet "key" istället för "index".
Keys
Man kan få fram en samling av alla keys i ett dictionary genom att läsa av egenskapen Keys som är inbyggd i alla Dictionaries.
Skapa egna generiska klasser
Generiska klasser är oftast "container-klasser", alltså klasser vars uppgift det är att lagra ett annat värde.
Ovanstående kod är en enkel nod i en s.k. länkad lista. I en länkad lista känner varje nod bara till "nästa nod".
Nu bestäms vilken datatyp variabeln value ska ha genom att den anges mellan <> när instansen skapas:
Last updated