The null conditional operator just got an upgrade.. we can do assignments with it now! Let’s see it in action.
Extension members take extension methods to the next level. Let’s see how to use this new C# 14 feature.
Should you use DateTime or DateTimeOffset? Well, it depends…
Buried deep in the list of .NET 8 improvements for WinForms is the GetStockIcon method. It gives us a way to access stock Windows icons at runtime for the OS the app is running on. Let’s check it out.
C# 11 added raw string literals, not a life-altering new feature, but they could be useful in the right circumstances. Let’s see how to use them.
As part of C# 12, we got a new feature called primary constructors. Let’s see how they work and what we can do with them.
The record modifier can define properties and equality in our classes for us, saving time and keeping our code cleaner. Let’s see how it works!
The .NET team has made some helpful additions to LINQ in recent years. Today let’s check out the various set-based updates from C# 10 / .NET 6.
The .NET team has made some helpful additions to LINQ over the last few years. Today let’s check out MinBy and MaxBy from C# 10 / .NET 6.
It’s great to see Microsoft still giving us new things in LINQ. With C# 13 / .NET 9, we get CountBy and AggregateBy, so let’s see how to use them.
Async code isn’t always intuitive, but practicing helps. Let’s take a look at Async, CancellationToken, and IProgress, in a few short examples.
Testing .NET code involving time has always been a pain, but the TimeProvider class (backported to the .NET Framework) gives us awesome new tools.
Testing timers in C# is difficult, but .NET 8 (C# 12) adds an abstract TimeProvider class that makes it easier. Let’s take a closer look.
Testing time in C# is difficult, but .NET 8 (C# 12) adds an abstract TimeProvider class that makes it easier. Let’s take a closer look.
A look at if/else, switch/case, pattern matching, other options … and which is best. (spoiler: none ;) )
C# has been getting a lot of pattern matching love in recent years, like with list patterns in C# 11. The problem is knowing where and how to use it.
Generic attributes increase the flexibility of a very early .NET feature. Let’s try using them and see how it keeps our code DRY.
When sending notifications in a WinForms app, a MessageBox is the only way to go… or is it? Let’s get creative and see what else we might do.
Writing async code whenever possible is great, but how do we do it when we’re stuck with legacy (and very synchronous) code?
It’s trivial to register a dependency in a .NET API, but it’s important to clarify a few terms that drastically change a dependency’s lifetime.