I’ve searched for this and found this:
How To Detect If Type is Another Generic Type
The problem with this solution is that it expects the implementation to have the same type parameters. What I want is to see if a class implements an interface with any type parameter.
Example:
public interface IMapper<in TSource, out TDestination>
{ ... }
public class StringMapper : IMapper<string, StringBuilder>
{ ... }
Console.WriteLine(typeof(IMapper<,>).IsAssignableFrom(typeof(StringMapper)));
I want this to write true, but it writes false. How can I check if a class implements an interface with generic parameters?
I think you have to call
GetInterfaces()from your StringMapper and test each one forIsGenericType. Last but not least get the open type (IMapper<,>) of each generic one by callingGetGenericTypeDefinition()and test if it matchestypeof(IMapper<,>).That’s all you can do. But be aware, if the class inherits from another base class which also implements some interfaces, these won’t be listed. In that case you have to recursevly run down through the
BaseTypeproperties and do the above down till theBaseTypeis null.