Check if a type implements a generic interface without considering the generic type arguments
c#, generics, interface, types
Solution
As far as I know, the only way to do this is to get all interfaces and see if the generic definition matches the required interface type.
bool result1 = type.GetInterfaces()
.Where(i => i.IsGenericType)
.Select(i => i.GetGenericTypeDefinition())
.Contains(typeof(MyInterface<,>));
EDIT: As Jon points out in the comments, you could also do:
bool result1 = type.GetInterfaces()
.Where(i => i.IsGenericType)
.Any(i => i.GetGenericTypeDefinition() == typeof(MyInterface<,>));
Problem
I have an interface ``` public interface MyInterface<TKey, TValue> { } ``` Implementations are irrelevant. Now I want to check if a given type is an implementation of that interface. This method fails for ``` public class MyClass : MyInterface<int, string> { } ``` But I don't know how to do the check. ``` public void CheckIfTypeImplementsInterface(Type type) { var result1 = typeof(MyInterface<,>).IsAssignableFrom(type); --> false var result2 = typeof(MyInterface<int,string>).IsAssignableFrom(type); --> true } ``` What do I have to do for result1 to be true?