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?

Original source