Archive (338 posts)
2026 29 posts
- Goldfish in Claude
- Primary constructors are more than syntactic sugar
- A personal note: I built a running App for iOS and watchOS
- If It Quacks - Part 2
- Quack Quack: Duck-Typing in C# with Interceptors
- Adding Properties with extension methods in C# 14
- Claude Memory Admin
- xUnit.v3 4.0.0 released
- .NET Toolbox August Update
- .NET 11 Performance Edition
- Adding static getter thanks to extensions
- Set LogLevel of Blazor
- LinkedIn - What a dumbster fire
- Signals in Blazor
- EF Core 11 makes your split queries faster
- Zstandard compression in .NET 11
- BackgroundService exceptions now propagate in .NET 11
- ConfigurationIgnoreAttribute in .NET 11
- Source code generated string enums with exhaustion support
- records ToString and inheritence
- FullJoin in .NET 11 - potentially
- Tool-Highlight: Handy
- Being stupid is fun: Let's create long exception messages!
- New runtime async is hitting .NET 11 - Part 1
- Collection Expression Arguments in C# 15 are "out"
- .NET Toolbox February Update
- Sometimes you just need extensions methods to model your stuff
- Collection Expression Arguments in C# 15+
- .NET Toolbox
2025 49 posts
- Task.Delay fails if you wait longer than 49.7 days
- One Minute Knowledge: Is ToArrayAsync or ToListAsync faster for Entity Framework?
- GitHub Runners might not be a good benchmark baseline
- Mime Type Helper in .NET 11
- Using sortable UUID / GUIDs in Entity Framework
- No more public partial class Program in .NET 10
- Capturing Console Output in xUnit.v3
- ArrayPool Benchmarks: We have a problem
- LinkedIn: "Are you still using new Random() everywhere?"
- Inlining and structs in C#
- Use CancellationTokens
- LinkedIn Benchmarks again
- ToDictionaryAsync retrieves the whole object from the database in Entity Framework
- Divide and Conquer the Database
- Quick one: Difference between collection expressions and collection initializer
- Two more LINQ extensions in dotnet 10
- How to not return all properties in SqlRaw
- Disabling thread safety check in Entity Framework
- Using Architecture Tests for CancellationTokens and sealed classes
- Why Lists are not lowered to a while loop
- ToListAsync is fast again in Entity Framework (kind of)
- Adding test description for data-driven tests in xUnit
- You can't use switch expressions in Blazor (sometimes)
- .NET 10 Performance Edition
- How to get to know the latest dotnet features - the nerdy way
- Why is enumerating over List faster than IList?
- Avoiding reflection in C# in way unsafer ways!
- Writing new guards with extensions in C# 14
- Clearing NuGet Caches
- Does .NET Documentation get ads? Aka: Is Copilot in the docs something useful?
- HttpClient improvements in .NET 10
- Extensions get an update in .NET 10
- A custom 404 page in Blazor Web Apps
- More LinkedIn "Tips": Dragging your whole database into memory!
- C# Language Mind map v14
- Solving Problems you wouldn't have if you wouldn't use Entity Framework
- TypeScript-Go: A 10x Faster TypeScript without .NET but in Go
- System.Linq.Async is part of .NET 10 - LINQ for IAsyncEnumerable
- Tailwind v4 with Blazor - It just got easier
- C# 14: Null-conditional assignment
- IEnumerable vs IEnumerator in C#: One is 2x Faster - LinkedIn Edition
- Managed Postgres Instance: Neon
- LINQ MindMap: .NET 10 Edition
- Validate that your DI Container can be created in ASP.NET Core
- When will .NET Framework retire?
- Cache CORS Preflight Requests
- Announcing Developer Academy
- Equipping 3rd party types with debugging capabilities
- Why is Open Source important? And is it free?
2024 60 posts
- Authenticate videos and images in Angular
- Some news about .NET 10: BackgroundServices and new String Comparer
- LINQ might get a "left join" operator in .net 10
- Having fun with ValueTuple
- "Always use early returns" - LinkedIn Edition
- How to assert assumptions in code that might not be true?
- An awaitable Blazor Modal Dialog
- Be careful with ToListAsync and ToArrayAsync in Entity Framework Core
- ToArray(Async) vs ToList(Async) in Entity Framework 8
- Comparing the performance between the Minimal API and classic Controllers
- Git Tricks: Get the last checked out branch
- Centralize your packages in .NET with NuGet
- xUnit v3 and some stuff about TUnit
- Fullstack Web Applications with .NET, Nx and Angular Seminar
- Swagger Replacement in ASP.NET 9
- Managing TaskCancellationTokens in a central service in ASP.NET
- LINQ Joins on multiple columns in Entity Framework
- How to test HttpClient inside API Tests
- To Soft Delete or Not to Soft Delete
- FormattableStringFactory - Creating dynamic FormattableString instances
- async2 - The .NET Runtime Async experiment concludes
- Organizing Parameters in Minimal API with the AsParametersAttribute
- How many API's does .NET have?
- The state machine in C# with async/await
- How not to benchmark!
- UUID v7 in .NET 9
- Codespaces for your open-source project
- ReadOnlySet<T> in .NET 9
- NCronJob - June Edition
- Are my EF LINQ to SQL queries safe?
- Does an HttpClient await the Header and the body?
- StringBuilders magic for very large strings
- Cancel WhenAny - linked CancellationTokenSource
- Help my memory dump always shows me some exceptions!
- MemoryCache, DistributedCache and HybridCache
- Generate http files from a swagger definition
- NCronJob - Big Updates
- .NET 9 LINQ Performance Edition
- Boosting Productivity with Analyzers
- Checking your solution for NuGet vulnerabilities or deprecated packages
- How does a List know that you changed it while enumerating it?
- Does readonly make your code faster?
- AI Hype - Am I out of work in five years?
- Fluent API to await multiple calls and get their respective results
- Equip 3rd party types with a deconstructor
- Pattern matching and the compiler can be surprising
- C# 13: Allow ref and unsafe in iterators and async
- NCronJob - Scheduling made easy
- bUnit v2 - The Blazor unit testing library vNext
- Typesafety in xUnit with TheoryData<T>
- Lock statement patterns
- Avoid multiple boolean parameters
- LINQ MindMap: .NET 9 Edition
- Garbage Collector (over)simplified
- SearchValues object become better with .NET 9
- Three new LINQ methods in .NET 9
- A replacement for BinaryFormatter in .NET 8
- An alternative to AutoMapper
- Const strings are not so const after all
- An asynchronous lock free ring buffer for logging
2023 86 posts
- A new lock type in .NET 9
- The first possible new feature of C# 13: Params collection
- bUnit Generators - Generate your stubs automatically
- Entity Framework - Storing complex objects as JSON
- A journey about the new interceptors of .NET 8
- Blazor .NET 8 - Enhanced Form Navigation
- A more flexible and enhanced way of logging in .NET 8
- Interactive LINQ tutorial, especially for beginners
- Redux Pattern in Blazor
- Yes you can create classes on the stack!
- Interfaces can have private methods
- Blazor with TailwindCSS
- Structured Concurrency in C#
- .NET 8 and Blazor United / Server-side rendering
- Questions I asked as .NET interviewer
- Less boilerplate code with the new primary constructor in C# 12
- A new way of doing reflection with .NET 8
- Building a Minimal ASP.NET Core clone
- Enabling List<T> to store large amounts of elements
- Turn on Nullability checks by default
- The "Weak Event" Pattern in C#
- Expression-bodied members in properties
- Enum.TryParse unexpected behavior
- Creating Your Own Fakes Instead of Using Mocking Libraries
- What's going on with Moq? SponsorLink and burnt soil!
- Keyed Services in the IServiceProvider in .NET 8 preview 7
- The combined power of F# and C#
- How to benchmark different .NET versions
- Gracefully Handling Entity Framework Exceptions with EntityFramework.Exceptions
- .NET Framework 4.8 to .NET 6 migration
- Three tricks with Dictionary
- Overload resolution in C#
- Why I like and prefer xUnit
- LINQ: Select.Where or Where.Select?
- Missing Stack trace when eliding the await keyword
- Create your own Mediator (like Mediatr)
- C# 12: Collection literals
- How does List work under the hood in .NET?
- Span / Memory / ReadOnlySequence in C#
- Time abstraction in .NET 8
- New Terminal logger for .NET 8
- nameof get's a bit better in C# 12
- How does TryGetNonEnumeratedCount work?
- 6 useful extensions for IEnumerable
- Some cool things you can do with ValueTuple
- Becoming a Microsoft MVP
- Entity Framework and ordered indexes
- Controlling the log level of your application
- Verifying your DI Container
- Create your own Validationattribute in ASP.NET Core
- Domain events and the "Unit of Work" pattern
- Covariance and Contravariance in C#
- .NET 8 Performance Edition
- 5 useful extensions for Task<T> in .NET
- Source Generators and Regular Expressions
- LINQ on steroids with SIMD
- Creating a ToolTip Component in Blazor
- C# Source Generators: How to get build information?
- Leverage 'is not' Operator for Exception Filtering!
- Caching in .NET with MemoryCache
- Write your own AutoMapper in C#
- LINQ // Skip and Take
- How to write your own cron Job scheduler in ASP.NET Core (like Quartz, Hangfire, ...)
- Benchmarking - A matter of perspective
- Is a square a rectangle? Liskov substitution principle in action
- The Humble Object Pattern
- Performance (ReadOnly)List vs Immutable collection types
- From Testing Pyramid to Diamond
- Getting git version information in your C# code
- error NETSDK1194: The "--output" option isn't supported when building a solution.
- A (performance) quirk with JsonSerializer
- What is a Middleware and how to use it in ASP.NET Core?
- Multi-Tenancy with RavenDB and ASP.NET Core
- C# Language Mind map
- Repository Pattern - A controversy explained
- Native DateOnly and TimeOnly support in Entity Framework 8 in SQL Server
- C# Lowering
- Deep nesting - Why and how to avoid
- C# 12: Primary Constructors
- Cohesion - An indicator for refactoring
- Entity Framework 8: Raw SQL queries on unmapped types
- Easy Pagination for Entity Framework in 3 steps
- No, No, No - Tasks are not threads and they are not for performance!
- Using GitHub as your portfolio
- .NET Tips and Tricks & ValueStringBuilder
- Give your strings context with StringSyntaxAttribute
2022 88 posts
- C# 12: Default Parameters in Lambdas
- ReadOnlySpan<char> and strings - How not to compare them
- Structure and order your DI container
- Array, List, Collection, Set, ReadOnlyList - what? A comprehensive and exhaustive list of collection-like types
- Simple DI - Container
- Delete a record without prior loading in Entity Framework
- ChatGPT - Current state for .NET - and in general
- Check for elevated rights in .NET 8
- Abstraction vs Encapsulation
- How to enumerate through a StringBuilder
- New ArgumentException and ArgumentOutOfRangeException helpers in .NET 8
- A new wave of analyzers in .NET 8
- Frozen collections in .NET 8
- "Use always a StringBuilder" - Internet myths
- How to get allocations in .NET? And how big is an empty array?
- Anonymous test data with AutoFixture
- Design patterns explained with sketches
- Mutable value types are evil! Sort of...
- Marking API's as obsolete or as experimental
- Infographics Compendium III - Exceptions, EF Sanitized, Operators, ...
- local functions vs lambda expressions
- Throwing exceptions - Why is my stack trace lost?
- LiteDB - A .NET embedded NoSQL database
- Cursed C# - Doing shenanigans in C#
- Infographics Compendium II - ThrowHelper, null Task and more
- Low-level struct improvements in C# 11
- How does the key exchange in HTTPS work?
- Introduction to WebApplicationFactory
- Infographics Compendium I - Generators, pure functions and more
- x86 vs x64 in .NET
- Pattern matching is awesome
- How does Pagination work?
- Blazor Project Structure
- Memory is complicated
- ASP.NET Core - Why async await is useful
- LINQ explained with sketches - the eBook
- EF7 - Bulk updates and Bulk deletes
- NDepend
- LINQ explained with sketches
- Mediator Pattern - CQRS with MediatR
- Logging Source Code Generators
- Git-Flow, GitHub-Flow, Gitlab-Flow and Trunk Based Development explained
- Blazor Client - Loading Screen
- How does git work?
- Abstract class vs interface
- SOLID Principles in C#
- C# vNext - What could come
- Central nuget store for your UNO Platform App
- When does Blazor (not) render?
- Wrap Event based functions into awaitable Tasks - Meet TaskCompletionSource
- goto in action - The exception from the rule
- What is the difference between C#, .NET, IL and JIT?
- Delegate, Action, Func, Lambda expression - What the heck!?
- The garbage collector in .NET - Part 2: Compacting
- ObjectPool - Rent and return some instances
- Blazor with an RSS Feed
- How to unit test a RavenDB
- The garbage collector in .NET
- Blazor with CancellationToken support
- Stop using Finalizers in C#
- Tail-Recursion - Explained with the Fibonacci series
- Why are sealed classes faster in C#? And should I seal them?
- Passing by value or by reference - What is faster?
- ReadOnlyCollection is not an immutable collection
- Is public const bad?
- Modal Dialog component with Bootstrap in Blazor
- 4 Different ways of creating an array
- default(MyStruct) vs new MyStruct() - what is the difference?
- From Zero to Production - Generate everything with a single button
- struct vs readonly struct vs ref struct vs record struct
- Create a low allocation and faster StringBuilder - Span in Action
- Reusable loading Bar Component in Blazor
- UNO Platform - Build a Todo App - Part 5
- UNO Platform - Build a Todo App - Part 4
- The Trie - A powerful data structure
- UNO Platform - Build a Todo App - Part 3
- UNO Platform - Build a Todo App - Part 2
- UNO Platform - Build a Todo App - Part 1
- Using SSE in C# on the example of the sum of a list
- Decorator Pattern using the example of a cached repository
- RequiredIf - Extend the validation in Blazor
- Directory.Build.props - Centralize your builds
- DebuggerTypeProxy - Displaying complex states in the debugger
- Blazor Performance Tuning - Good practices and advanced use cases
- Heap, Stack, Boxing and Unboxing, Performance ... let's order things!
- Prerendering Blazor Apps - How does it work / tips and tricks
- Enum.Equals - Performance analysis
- Lazy load components with Blazor - Virtualize in Action
2021 26 posts
- Generator-Function in C# - What does yield do?
- Task vs ValueTask - The what's, when's and how's
- Lifetime Scope in Blazor Client and Server Apps
- Branch Prediction - How much does an if cost?
- ILGPU - Processing Data on your GPU (CUDA / OpenCL in C#)
- static abstract interfaces and generic math
- A better enumeration - Type safe from start to end
- git hook - prefix your commit message with your JIRA ticket
- API Versioning in ASP.NET Core made easy
- git - useful aliases
- IEnumerable vs IQueryable - What's the difference
- How to hunt down bugs with git bisect
- How to rebase onto a different branch with git
- Tactical Design Patterns in C# - Part 1: Creational
- struct Performance
- Shorts: foreach on type without IEnumerable
- Task.WhenAny - How to cancel other tasks
- A story about boxing / unboxing and string interpolation in C#
- EF Core 6 - New Features
- Tutorial Unit and E2E Testing in Blazor - Part 2 Playwright Introduction
- Quickly asked: Should I use unsigned integers (uint, uint8, ...) in C#?
- Async Await Pitfalls / Guidelines - .NET User Group Zurich Presentation
- Tutorial Unit and E2E Testing in Blazor - Part 1
- Blazor Improvements in .NET 6
- Upcoming .NET User Forum Zurich / 6th July 2021
- My first Post