如何解决当接口具有泛型而不是实现时,为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 举报,一经查实,本站将立刻删除。