Hoppa till innehåll

Strängar, tecken och booleska värden

↑

Exemplen är oberoende C#-utdrag för moderna .NET-konsolprojekt, om inget annat anges. Klassdeklarationer och toppnivåkod kan placeras i samma Program.cs-fil, med toppnivåkoden först.

Strängar representerar text och booleska värden representerar villkor. Text indexeras från noll och en C#-string är oföränderlig: operationer ger nya strängar.

Använd + för att sammanfoga strängar eller $"...{uttryck}..." för att infoga värden. Interpolering blir ofta tydligare när flera värden ska visas.

Example.cs
string player = "Alex";
int score = 25;
string oldWay = player + ": " + score;
string message = $"{player}: {score} points";
Console.WriteLine(message);

text[0] hämtar den första UTF-16-kodenheten. Length räknar UTF-16-kodenheter, inte alltid tecken som användaren ser dem. \n ger radbrytning, \" citationstecken och verbatim-strängar med @ passar för sökvägar.

Example.cs
string label = "Level";
char first = label[0];
string multiline = "Line one\nLine two";
string path = @"C:\Games\Save.txt";
Console.WriteLine($"{first}, {label.Length}");

En bool är antingen true eller false. C# behandlar inte automatiskt heltal som booleska värden: if (1) är ogiltigt. Jämförelser ger booleska resultat.

Example.cs
bool isReady = true;
int lives = 0;
bool canPlay = isReady && lives > 0;
Console.WriteLine(canPlay); // False

En string lagrar en sekvens av UTF-16-kodenheter. Metoder som Replace, Trim, ToUpper och Substring ger en ny sträng (eller motsvarande befintlig); de ändrar inte den ursprungliga variabeln om du inte tilldelar resultatet. Strängar är därför enkla att dela, men upprepad sammanfogning i en stor loop kan skapa många tillfälliga objekt. Använd StringBuilder vid omfattande upprepad textbearbetning.

Program.cs
string original = " Alex ";
string cleaned = original.Trim().ToUpperInvariant();
Console.WriteLine($"[{original}]"); // [ Alex ]
Console.WriteLine(cleaned); // ALEX

text[0] läser en char, alltså en UTF-16-kodenhet. Vissa Unicode-symboler, till exempel många emoji, kräver två kodenheter och vissa synliga tecken består av flera kodpunkter. För enkla namn med enbart vanliga latinska tecken är skillnaden sällan märkbar, men för internationella användartexter spelar den roll. Använd Unicode-medvetna API:er när du behöver arbeta med synliga tecken snarare än enskilda char.

$"Score: {score}" sätter in resultatet från ett uttryck i en sträng. Det gör meddelanden tydliga, men välj avsiktliga format för tal och tid. Skriv {{ eller }} för klammerparenteser som ska visas bokstavligt i interpolerad text. Vid SQL eller skalkommandon får du inte bara interpolera opålitlig indata; använd parametriserade API:er i det system som ska anropas.

En bool är true eller false. Namn som isAlive, hasKey eller canJump tydliggör avsikten. Kombinera villkor med &&, || och !. Jämförelsen if (isAlive == true) är onödigt omständlig jämfört med if (isAlive). Skilj också mellan ett lagrat booleskt fält och en egenskap som kan beräknas utifrån annat tillstånd.

Använd gärna interpolering för utskrifter och tydliga booleska namn som isActive eller hasPermission.

Index utanför strängens längd ger undantag. Emoji kan dessutom använda fler än en UTF-16-kodenhet.

Skriv ut spelarnamn och antal liv med interpolering, följt av om spelaren har fler än noll liv.

Visa ett lösningsförslag

Console.WriteLine($"{name}: {lives}"); Console.WriteLine(lives > 0);.