
Yan Cui
I help clients go faster for less using serverless technologies.
When you have a generic interface such as:
1 2 3 4 5 | 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:
1 2 3 4 5 6 7 8 | 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:
1 | Console.WriteLine(intInit is IInitializable<>); // doesn't compile |
Instead, you can do something like this:
1 2 3 4 5 | 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:
1 2 3 4 5 6 | 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.