Entity Framework med Code first
2019-06-15
För att arbeta med databaser i C# använder man ofta Entity Framework (EF). Det är ett ORM-system (objekt-relationell mappning), som låter en skriva kod som om det vore vanliga objekt, istället för att manuellt skriva SQL-kod, exekvera den och därefter konvertera resultatet till objekt.
Enum-värdet value__
i C#
2019-06-14
Som member i en enum i C# kan man använda vilken identifier som helst. Nästan. enum Color { Yellow, Orange, Red, Magenta, value__, // <-- ERROR } Om man försöker döpa en member till value__, så får man detta felmeddelande:
Komposition: Arbeta med flera Task
s
2019-04-17
När man arbetar med Tasks i C# vill man ibland köra flera av dom parallellt, eller kanske veta när den första är avslutad. // Starta en task. var task1 = Task.Run(() => { if (!myServer.IsRunning) myServer.Start(); myMonitorService.Start(); }); // Starta ytterligare en task.
Konvertera till och från Task
2019-04-16
När man programmerar i C#, finns det fall då man vill konvertera från ett värde till en Task, och andra situationer där man vill göra det omvända. En Task kan innehålla ett värde av vilken typ som helst, men i det här inlägget kommer jag att använda int.
TaskCompletionSource
2019-04-15
I C# finns flera olika mönster för att hantera asynkronicitet. Det generella sättet att konvertera vilket mönster som helst till en Tasks är att använda en TaskCompletionSource. Därigenom gör man det möjligt att konsumera det andra mönstret via async/await.Task: Result
2019-04-14
Om en metod returnerar en Task så är det ofta en bra idé att fortsätta använda Tasks och async/await i sin egen kod. Det gör det mer uppenbart för dom som använder ens metod att operationen kan ta lång tid. Ibland måste man emellertid implementera ett synkront interface, och alltså blockera aktuell tråd till dess att en Task har avslutats.Task: Delay
2019-04-13
Oftast vill man att ens kod ska köra så snabbt som möjligt, men ibland behöver man lägga in en fördröjning. Istället för Thread.Sleep kan man skapa en task som avslutas efter det angivna antalet millisekunder med Task.Delay. private async Task<int> CalculateDelay() { // Vänta i 3 sek await Task.
Snyggare syntax med async
/await
2019-04-12
async och await ger snyggare syntax när man arbetar med Tasks i C#. Låt oss börja med en synkron beräkning. När man anropar den, så kommer den aktuella tråden att blockeras tills beräkningen är klar, vilket kan ta lång tid om det är en långsam beräkning.Task: ContinueWith
2019-04-07
Givet en Task kan man skicka in ett återanrop (callback), som exekveras när Tasken har fullföljts, antingen genom att resultatet satts, eller genom att exception har kastats. Task<int> futureResult = Task.Run(() => { // Gör en långsam beräkning i en annan tråd return 2 + 2; }); futureResult.Task: Run och FromResult
2019-04-06
Utför en uppgift Om man vill exekvera en uppgift i en egen tråd, men inte vill administrera trådpooler eller manuellt hålla koll på om uppgiften har utförts, så kan man använda Task.Run. Den resulterande Task som skapas innehåller information om huruvida den har kastat exception, avslutats korrekt eller avbrutits.
Task
, async
och await
i C#: Introduktion
2019-04-05
I C# finns olika sätt att hantera concurrency, samtidig exekvering. Jag förespråkar Tasks, vilket är ämnet för den här artikelserien. Vi går igenom hur Tasks fungerar och några metoder som man kan använda med dom, och hur syntaxen för async/await ofta underlättar användandet av Tasks.C# 7: Mer information
2019-03-18
Vi har gått igenom några av dom bästa och viktigaste nyheterna i C# 7, men det finns många fler för den som vill fördjupa sig. Microsoft har dokumenterat samtliga nyheter i C# 7: What's new in C# 7.0 What's new in C# 7.
C# 7: throw
-uttryck
2019-03-14
I C# har throw historiskt alltid varit ett eget statement, dvs. något som måste stå på sin egen rad, separerad med semikolon. Här följer ett exempel på hur man kan skriva en setter med en nullkontroll. private string name; public string Name { get => name; set { if (value == null) throw new ArgumentNullException("Value required"); name = value; } } I C# 7 utökar man throw.
C# 7: Förenklat default
-uttryck
2019-03-09
Ett genomgående tema i C# 7 är små förbättringar som gör livet som programmerare lite lättare. I det här inlägget kikar vi på hur man kan förenkla default-uttryck. Om kompilatorn automatiskt kan sluta sig till vilken typ som ska användas, så behöver man inte längre ange typen efter default.C# 7: Lokala funktioner
2019-03-08
En lokal funktion är som en metod inuti en annan metod, och kan ibland vara ett alternativ till privata metoder som bara anropas från ett ställe. Dom är särskilt användbara när man behöver en hjälpfunktion och kan tydliggöra att en funktion bara används inom en annan metods kontext.
C# 7: Värdetuplar med ValueTuple
2019-03-04
I C# finns klasser och structar, men ibland räcker det med något lite enklare, och där är tuplar en lösning. Redan före C# 7 fanns det tuplar, men dom var osmidiga att använda, och för att komma åt innehållet fick man skriva använda properties med namn Item1, Item2 och så vidare.C# 7: Deklarera utvariabler
2019-03-03
Likt förra artikeln i denna serie, där vi kunde deklarera en variabel direkt i is-uttrycket, kan man i C# 7 också deklarera och initialisera en variabel direkt i ett metodanrop med out. private Dictionary<string, string> Translations = new Dictionary<string, string> { { "Hello", "Hej" }, { "World", "Värld" }, }; public string Translate(string key) { string translation; if (Translations.
C# 7: Mönstermatchning med is
och switch
2019-03-02
C# är ett programmeringsspråk som kontinuerligt tar beprövade idéer från andra språk. En sådan idé är mönstermatchning (eng. pattern matching) från funktionella programmeringsspråk. Det är ett alternativ till objektorienteringens arv, där man med hjälp av virtual och override väljer implementation baserat på objektets typ.C# 7: Numeriska värden
2019-03-01
C# är ett programmeringsspråk som utvecklas kontinuerligt. Medan det går att fortsätta skriva "gammal" C#, så kan man år 2019 ibland använda mer flexibel och kompakt syntax. I den här artikelserien går vi igenom några av dom viktigaste nyheterna i C# 7, som gavs ut år 2017.Introduktion till Linq: Funktionell programmering och lat evaluering
2019-02-02
Linq (Language Integrated Query) är en komponent i C# och .Net. I det här inlägget tittar vi på hur Linq genom sin query-funktionalitet hjälper oss att uttrycka programmeringsproblem mer deklarativt i enlighet med principerna för funktionell programmering, i kontrast till imperativ programmering.Introduktion till Linq: join
2019-02-01
Nu ska vi gå igenom hur man kan matcha ihop två listor med hjälp av join, en del av Linq (Language Integrated Query). Enkel join, för uppdatering Motsvarande i SQL: INNER JOIN (synonym: JOIN). Om du har koll på JOIN i SQL, så kommer du känna igen det i Linq också.Introduktion till Linq: SelectMany()
2019-01-31
Här går vi igenom hur man väljer ut element i nästlade listor med SelectMany() från Linq (Language Integrated Query). Select() och SelectMany() Motsvarande i Javascript: map() och flatMap(). Redan i första inlägget gick vi igenom hur Select() fungerar: för varje element i listan väljer vi ett element som ska ingå i den resulterande listan.Introduktion till Linq: Lambdauttryck
2019-01-30
Om du blir förvirrad av vad x => x egentligen betyder, så har du kommit rätt! Syntaxen är kompakt och kan vara svårtydd, om man inte vet vad alla delar betyder. Lambdauttryck (eng. lambda expressions) är metoder eller funktioner som man definierar som del av ett uttryck, oftast utan att ge dom ett namn.Introduktion till Linq: ToList() och ToArray()
2019-01-28
Det här inlägget om Linq (Language Integrated Query), handlar om hur man kan konvertera en samling till en annan typ. ToList() Om man har en IEnumerable kan det finnas många anledningar att göra om den till en lista. Man kanske behöver returnera samlingen som en lista, eller så vill man säkerställa att den IEnumerable man har inte gås igenom flera gånger (t.Introduktion till Linq: Count(), Any() och All()
2019-01-27
I det här inlägget om Linq (Language Integrated Query), en komponent i C# och .NET, så går vi igenom några vanliga metoder för att räkna antal matchningar. Count() Om man har en IEnumerable, och vill ta reda på antalet element, antingen totalt eller som uppfyller ett visst kriterium, så kan Count() med fördel användas.Introduktion till Linq
2019-01-26
Linq (Language Integrated Query) är en komponent i C# och .NET, som direkt i koden tillhandahåller query-funktionalitet mot databastabeller, listor eller andra IEnumerable. Tilläggsmetoder och frågesyntax Linq kan användas med två olika syntaxer. Dom båda följande uttrycken gör exakt samma sak, och vilken syntax man väljer är en smaksak.