Referenssida över vad som tillkommit i C# sedan version 4.0 (2010). Tänkt som komplement till ämnessidorna — inte en ersättning. Se Varför C# ser ut som det gör för sammanhanget bakom varför språket utvecklas som det gör.
Funktion Användning dynamicSen bindning vid runtime — mest COM-interop Named/optional parameters Metod(namn: "x", ålder: 5)Co-/contravariance i generics IEnumerable<out T>, IComparer<in T>
Funktion Användning async/awaitAsynkron kod utan trådblockering — se Asynkron Caller info-attribut [CallerMemberName], [CallerLineNumber] — bra för loggning
Funktion Användning Expression-bodied members int Kvadrat(int x) => x * x;Null-conditional operator person?.NamnString interpolation $"Hej {namn}"nameofnameof(person) — refaktoreringssäkra strängarException filters catch (Exception e) when (e.Message.Contains("x"))Auto-property initializers public int Ålder { get; set; } = 18;
Funktion Användning Tuples & deconstruction (string namn, int ålder) = Hämta();Pattern matching (is/switch) if (obj is Person p)Local functions Hjälpfunktion inuti en metod out-variabler inlineif (int.TryParse(s, out int tal))ref returns/localsReturnera referens istället för kopia Discards _ för ointressanta värden
Funktion Användning Async Main static async Task Main()Default literal int x = default;in-parametrar, readonly struct, ref structVärdesemantik för prestanda private protectedNy access modifier Generic constraints unmanaged, Enum, delegate
Funktion Användning Nullable reference types string? vs string — se Nullable typer Switch expressions var x = tal switch { 1 => "ett", _ => "annat" };using-deklarationerusing var fil = ...; — disposas i slutet av scopeRanges & indices arr[1..3], arr[^1]Async streams IAsyncEnumerable<T>, await foreachDefault interface methods Implementation direkt i interface
Funktion Användning Records record Person(string Namn, int Ålder); — immutable data med värdelikhetInit-only setters { get; init; } — sätts bara vid objektskapandeTop-level statements Program.cs utan Main-boilerplate — se Programstruktur Target-typed new Person p = new("Anna", 30);Pattern matching Relational (> 10) och logiska (and/or/not) patterns
Funktion Användning Record structs Records med värdesemantik istället för referenssemantik Global using En using-fil täcker hela projektet File-scoped namespace namespace Foo; utan block, en indenteringsnivå mindreCallerArgumentExpressionFångar uttrycket som skickades in, t.ex. för assert-meddelanden
Funktion Användning Raw string literals """...""" — strängar med citattecken/backslash utan escapingRequired members required string Namn; — måste sättas vid objektskapandeGeneric math static abstract medlemmar i interfacesList patterns if (arr is [1, 2, ..])UTF-8 string literals "text"u8
Funktion Användning Primary constructors class Person(string namn, int ålder) — även för klasser, inte bara recordsCollection expressions int[] arr = [1, 2, 3]; med spread [..a, ..b]Default lambda-parametrar (int x = 5) => x * 2Alias any type using Point = (int x, int y);
Funktion Användning params-collectionsparams IEnumerable<int> — inte bara array längreNytt lock-objekt System.Threading.Lock — snabbare än lock på objectPartial properties/indexers Dela deklaration/implementation, t.ex. för källgenererad kod \e-escapeEscape-tecken i strängar
Funktion Användning Extension members Nytt extension-block-syntax för metoder/properties/statics field-nyckelordetÅtkomst till kompilatorgenererat backing field i en property Null-conditional assignment person?.Namn = "Anna";Implicit span conversions Mindre friktion mellan array och Span<T>
Preview 7 (aug 2026). Listan kan växa fram till GA.
Funktion Användning Union types public union Pet(Cat, Dog, Bird); — värdet är exakt en av de angivna typerna, med exhaustive pattern matching i switchCollection expression arguments Utökning av [...]-syntaxen (C# 12) med argument till collection-initialiseringen Closed hierarchies closed-modifierare på en klass — låser vilka typer som får ärva den inom samma assembly, gör switch exhaustive utan defaultExtension indexers Indexers (obj[i]) kan definieras via extension members Labeled break/continue break label;/continue label; — hoppa ur nästlade loopar utan flaggvariablerMemory safety (unsafe-modell) Första previewen av en uppdaterad unsafe-modell
!!-operatorn för parameternull-check (void M(string name!!)) var föreslagen till C# 11 men droppades efter negativ feedback. Ersattes av ArgumentNullException.ThrowIfNull(param) (.NET 6, BCL-metod — inte språksyntax).
Varje ny C#-version löser antingen ett skrivbördeproblem (mindre boilerplate) eller ett säkerhetsproblem (nullable, required members). Ingen enskild version är “den stora” — förändringarna är kumulativa.
Skriven av Marcus Ackre Medina · GitHub · Nion Education
← Föregående Programstruktur Nästa → Variabler