Tecken och text
char — exakt ett tecken
char lagrar ett enda Unicode-tecken, i enkla citattecken:
char bokstav = 'A';char siffra = '7';char tecken = '!';char emoji = '😀'; // Unicode täcker mer än bara det latinska alfabetetchar är en värdetyp precis som int eller bool — 2 byte, alltid exakt ett tecken. Blandar du ihop enkla citattecken ('A', för char) och dubbla citattecken ("A", för string med ett tecken i sig) får du ett kompileringsfel, inte ett körfel — kompilatorn ser skillnaden direkt.
char ok = 'A'; // char — enkla citatteckenstring också_ok = "A"; // string med ett tecken — dubbla citattecken// char fel = "A"; // Kompileringsfel — "A" är en string, inte en charRäkna med tecken
Ett char är internt ett tal — dess Unicode-kodpunkt. Det gör att du kan jämföra och räkna med tecken:
char c = 'A';Console.WriteLine((int)c); // 65 — 'A':s plats i Unicode-tabellen
char nästa = (char)(c + 1);Console.WriteLine(nästa); // 'B'
bool ärSiffra = char.IsDigit('7'); // Truebool ärBokstav = char.IsLetter('A'); // Truestring — en sekvens av tecken
string är, till skillnad från alla typer hittills i detta kapitel, en referenstyp — den lagras på heapen, inte på stacken (se Garbage Collector för skillnaden). I praktiken märker du sällan av det: du använder string precis som en värdetyp, med ett undantag.
string namn = "Ada Lovelace";int längd = namn.Length; // 12string versaler = namn.ToUpper(); // "ADA LOVELACE"bool innehåller = namn.Contains("Ada"); // Truechar förstaBokstaven = namn[0]; // 'A' — indexering ger dig ett charSträngar är oföränderliga (immutable)
Varje metod som “ändrar” en sträng skapar egentligen en helt ny sträng — originalet rörs aldrig:
string original = "hej";string versal = original.ToUpper();
Console.WriteLine(original); // "hej" — orördConsole.WriteLine(versal); // "HEJ" — en ny strängDet är samma idé som immutability hos records — bara att string haft den egenskapen i C# sedan språket föddes. Bygger du en sträng i en loop med += skapas en ny sträng för varje varv, vilket blir kostsamt vid många iterationer — se StringBuilder för lösningen.
Jämföra strängar
string a = "Anna";string b = "anna";
Console.WriteLine(a == b); // False — skiftlägeskänsligt som standardConsole.WriteLine(a.Equals(b, StringComparison.OrdinalIgnoreCase)); // True== på strängar jämför innehållet (till skillnad från == på vanliga referenstyper, som jämför identitet) — men skiftlägeskänsligt. Vill du bortse från stora/små bokstäver, ange det explicit med StringComparison.
char eller string?
| Situation | Typ |
|---|---|
| Exakt ett tecken, du vill räkna eller jämföra tecken-för-tecken | char |
| Text av valfri längd — namn, meningar, hela dokument | string |
| Ett tecken som råkar representera text (“A” som svar i ett quiz) | Ofta string ändå — enklare att jobba med i UI och jämförelser |
Obligatorisk dad-joke
Varför var char så avslappnad på fest?
Den behövde bara hålla reda på en sak i taget.