.Net Tips – How to determine if a type implements a generic interface type

When you have a generic interface such as:

public interface IInitializable<T>
    bool IsInitialized { get; }
    void Initialize(T initObject);

It’s easy to check whether a given instance implements the IInitializable interface with a specific T:

public class IntInitializable : IInitializable<int>
    public bool IsInitialized { get; private set; }
    public void Initialize(int initObject) { IsInitialized = true; }
var intInit = new IntInitializable();
Console.WriteLine(intInit is IInitializable<int>);  // outputs TRUE

But what if you want to find out if a type implements the IInitializable interface of an arbitrary T? You won’t be able to simply get away with this:

Console.WriteLine(intInit is IInitializable<>);  // doesn't compile

Instead, you can do something like this:

var isIInitializable = 
           .Any(i => i.IsGenericType && 
                     i.GetGenericTypeDefinition() == typeof(IInitializable<>));

And if you want to find out what T is at runtime:

var t = intInit.GetType()
               .First(i => i.IsGenericType && 
                           i.GetGenericTypeDefinition() == typeof(IInitializable<>))

Yan Cui

I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.

You can contact me via Email, Twitter and LinkedIn.

Hire me.