C# Extension method for checking attributes

Yan Cui

I help clients go faster for less using serverless technologies.

Another good question on StackOverflow, and even better answer from Steven (miles better than what I managed!), the question was around how to implement an extension method to check whether a certain method has a particular attribute applied to it, mainly for the purpose of unit testing.

In his answer, Steven provided a couple of useful extension methods to get the metadata of a method using lambda expression and then check whether an attribute with the specified type has been applied to it:

public static MethodInfo GetMethod<T>(this T instance, Expression<Func<T, object>> methodSelector)
{
    // Note: this is a bit simplistic implementation. It will
    // not work for all expressions.
    return ((MethodCallExpression)methodSelector.Body).Method;
}

public static MethodInfo GetMethod<T>(this T instance, Expression<Action<T>> methodSelector)
{
    return ((MethodCallExpression)methodSelector.Body).Method;
}

public static bool HasAttribute<TAttribute>(this MemberInfo member) where TAttribute : Attribute
{
    var attributes = member.GetCustomAttributes(typeof(TAttribute), true);
    return attributes.Length > 0;
}

Nice, eh? I thought so too! Don’t forget to give him some much deserved up vote!


Whenever you’re ready, here are 3 ways I can help you:

  1. Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game.
  2. Consulting: If you want to improve feature velocity, reduce costs, and make your systems more scalable, secure, and resilient, then let’s work together and make it happen.
  3. Join my FREE Community on Skool, where you can ask for help, share your success stories and hang out with me and other like-minded people without all the negativity from social media.

 

Leave a Comment

Your email address will not be published. Required fields are marked *