Bootcamp

From idea to product, one lesson at a time. To submit your story: https://tinyurl.com/bootspub1

When I (don’t) use Extension Methods

Admir Mujkic
Bootcamp
Published in
4 min readNov 23, 2024

--

Extension Methods are a tool, and like any other tool they can improve the code in good hands. Having spent years as a software engineer, I’ve learned this: their strength comes from extending behavior without changing the original.

With that flexibility comes responsibility. However, if we use them where they are not suitable, it can lead to confusion, more challenging maintenance and sometimes the worst scenarios by causing that the application is not under best practices. Which is why it becomes essential to be aware not just of its usage but also, situations wherein you should refrain from using it.

When I use Extension Methods

There are times when Extension Methods truly make their mark. When I found myself to fix some parts in legacy code, I have encountered many cases where the risk of altering existing classes was way too higher than it could afford, mainly on systems without decent tests.

Extension Methods gave me the ability to add functionality in these moments without pulling my hair worrying about bringing down the whole system. Being able do to this and get out of the core codebase and add some value, at times was a lifesaver.

Safe extension of legacy code

This is something I felt as one of the greatest values of Extension Methods when I was working with legacy code. In those systems that cannot afford mistakes, Extension Methods provide a safe and reversible way to extend functionality. Email validation is a prime example of this.

Why is it useful?

Take the example of a legacy system I once worked on where email addresses were just plain strings with no validation. The issue was resolved by adding this extension, without changing the original code.

Improving Readability in Service Configuration

In web applications using ASP.NET Core, it is often necessary to configure services while reducing code repetition. By using simple Extension Methods, I have simplified these processes and increased readability of configurations.

When I avoid Extension Methods

I have learned through experience that Extension Methods are not the cure-all. In some cases, employing said methods leads to unnecessary complications in maintenance and a decrease in directness of the code intention.

Example: Substituting idiomatic and conventional code

I would recommend to avoid replacing idiomatic methods of the framework. Since Extension Methods reach a wide audience, I will recommend to never use Extension Methods to replace already existing, inbuilt idiomatic methods of the respective language or framework.

For example: TimeSpan— the method TimeSpan.FromSeconds(10)is a common C# method and trying to replace it with something like 10.Seconds()would be, I believe, unnecessary.

Why Do I Avoid It?

I think every C# developer already understands TimeSpan.FromSeconds. By introducing something like 10.Seconds(), I’m just adding extra mental effort. Others now have to learn a new abstraction that doesn’t bring any real value.

Example: Adding unnatural functionality

Extension Methods should be used to extend functionality that naturally belongs to a type. Adding functions that are out of context for the base type often leads to confusion.

Why Do I Avoid It?

Numbers like int are primitive types, and functions like IsPrime belong to utility classes, such as MathUtilities. Using extension methods like this confuses developers and disrupts the expected behavior of a basic type.By keeping functionality in its proper place, you ensure that your code is clear, logical, and easier to maintain.

The MathUtilities class is explicitly designed for mathematical operations, so developers naturally expect to find such functions here. In another hand, keeping domain-specific methods grouped makes your codebase easier to navigate and modify.

Other examples

I think there are many examples when I why not to use Extension Methods, however one of the most common mistakes (can we say misuse) I’ve seen is using Extension Methods to “patch” problems in the basic design. This is never a solution, only a postponement of the problem.

As someone who values ​​efficiency, I don’t want to clutter up IntelliSense with methods that aren’t often needed. Too many extensions for generic types like stringor intcan quickly choke IntelliSense suggestions and make development uncomfortable, which is also one example of why you shouldn’t force extension methods.

If you have any examples to share, please leave them in the comments.

For the end

Over the years, I’ve come to realize that the key to using Extension Methods effectively is understanding their strengths and limitations. When used thoughtfully to solve your problem, they can improve the readability, maintainability, and stability of your code, especially on legacy systems. But, misusing them can compromise the integrity of your application and make it harder for your team to work.

Cheers and Good Luck! 👋

--

--

Bootcamp
Bootcamp

Published in Bootcamp

From idea to product, one lesson at a time. To submit your story: https://tinyurl.com/bootspub1

Admir Mujkic
Admir Mujkic

Written by Admir Mujkic

I am Admir Mujkić, a technical architect with over 15 years of experience helping businesses harness technology to innovate, grow, and succeed.

Responses (3)