Yan Cui
I help clients go faster for less using serverless technologies.
This article is brought to you by
MongoDB 8.0 is here to change the game. Faster reads and inserts, and brand-new vector search to support modern AI-powered apps.
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 = intInit.GetType() .GetInterfaces() .Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IInitializable<>));
And if you want to find out what T is at runtime:
var t = intInit.GetType() .GetInterfaces() .First(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IInitializable<>)) .GetGenericArguments() .First();
Whenever you’re ready, here are 3 ways I can help you:
- Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
- I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.