Even in failure, an increase in understanding is a win

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.

  Aug 24, 2023 ·  3 min

What are generic attributes in C# 11?

Generic attributes increase the flexibility of a very early .NET feature. Let’s try using them and see how it keeps our code DRY.

  Aug 23, 2023 ·  6 min

Simple ways to notify a user without a MessageBox in WinForms

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.

  Aug 16, 2023 ·  6 min

How to call an async method from a synchronous one, without deadlocking

Writing async code whenever possible is great, but how do we do it when we’re stuck with legacy (and very synchronous) code?

  Aug 11, 2023 ·  7 min

What's the difference between singleton, scoped, and transient?

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.

  Jul 28, 2023 ·  3 min

How can I generate a new GUID?

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.

  Jul 27, 2023 ·  4 min

Comparing files in VS Code

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.

  Jul 26, 2023 ·  2 min

How to log messages to multiple targets with NLog

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.

  Jul 2, 2023 ·  6 min

What is the NUnit constraint model?

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.

  Jun 26, 2023 ·  9 min

Adding deconstructors to C# types

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?

  Jun 15, 2023 ·  5 min