Yan Cui
I help clients go faster for less using serverless technologies.
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.
