微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当接口具有泛型而不是实现时,为IsAssignableFrom

如何解决当接口具有泛型而不是实现时,为IsAssignableFrom

|| 我已经搜索过并找到了: 如何检测类型是否为另一种通用类型 该解决方案的问题在于,它期望实现具有相同的类型参数。我想要的是查看类是否使用任何类型参数实现接口。 例:
public interface IMapper<in TSource,out TDestination>
{ ... }

public class StringMapper : IMapper<string,StringBuilder>
{ ... }

Console.WriteLine(typeof(IMapper<,>).IsAssignableFrom(typeof(StringMapper)));
我希望它写为true,但写为false。如何检查类是否使用通用参数实现接口?     

解决方法

        我认为您必须从StringMapper调用
GetInterfaces()
,然后对每个one2进行测试。最后但并非最不重要的一点是,通过调用
GetGenericTypeDefinition()
并测试其是否匹配
typeof(IMapper<,>)
来获得每个泛型的开放类型(
IMapper<,>
)。 这就是您所能做的。但是请注意,如果该类继承自另一个也实现某些接口的基类,则不会列出这些接口。在这种情况下,您必须递归地遍历
BaseType
属性,然后执行上述操作,直到
BaseType
为空。     ,        对我来说就像一个魅力。如果有人感兴趣,以下是代码段:
    IEnumerable<Type> reports =
        from type in GetType().Assembly.GetTypes()
        where
            type.GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IReport<>)) &&
            type.IsClass
        select type;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。