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.
When what we're trying to accomplish fails, the extra knowledge and clarity we get just by making the attempt is a win all by itself.
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 code to be async when possible is great, but not always possible. So how do call async code from legacy, 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.
GUIDs are heavily used in the world of development, so let's look at a few quick and easy ways to generate them whenever we need them.
VS Code is a great editor with a lot of useful features, like being able to compare two random files for differences. Let's see how.
When it comes to finding a bug in an app, few things beat a good trail of logs. And for writing those logs, few tools beat NLog in simplicity or flexibility. I rarely appreciate just how flexible it is though, so it's worth spending a little time taking a closer look.
I recently discovered the constraint model in NUnit. It's been there for years, hiding in plain sight! What is it? Is it worth using? Let's check it out.
We can deconstruct tuples in C#, but does it work with other types? And assuming it does (spoiler - it does), is it worth bothering with?
What is Generic Math support in C# 11, and how do we take advantage of it? Let's dig in and find out! (part 3 of 3)
What's it mean to overload operators in C#? And what's that have to do with Generic Math in C# 11? Let's find out! (part 2 of 3)
What are static abstract members (new in C# 11), what can we do with them, and how are they related to Generic Math? (part 1 of 3)