C#学习教程:无论泛型类型参数如何,都检查一个类型是否实现了泛型接口现在我想检查给定类型是否是该接口的实现。此方法因publicclassMyClass:MyInterface{}而失败,但我不知道如何检查。publicvoidCheckIfTypeImplementsInterface(Typetype){varresult1=typeof(MyInterface).IsAssignableFrom(type);-->falsevarresult2=typeof(MyInterface).IsAssignableFrom(type);-->true}我需要做什么才能使result1成为现实?据我所知,唯一的方法是获取所有接口并查看通用定义是否与所需的接口类型匹配。boolresult1=type.GetInterfaces().Where(i=>i.IsGenericType).Select(i=>i.GetGenericTypeDefinition()).Contains(typeof(MyInterface));编辑:正如乔恩在评论中指出的那样,您也可以这样做:boolresult1=type.GetInterfaces().Where(i=>i.IsGenericType).Any(i=>i.GetGenericTypeDefinition()==typeof(MyInterface));通常,只有当接口包含不依赖泛型类型参数的函数才需要这种行为。如果您可以控制接口,那么最好的解决方案是让与类型相关的部分继承与非类型相关的部分。例如,如果现有的集合接口不存在,您可以将它们定义为:如果这样的事情是使用ICollection完成的,那么期望IEnumerable但得到一个CatList类型的对象,其中CatList只是实现IList将毫无问题地使用该对象的Count成员(注意List实现非泛型ICollection,但其他IList实现可能不是)。事实上,如果您曾经遇到过使用代码以某种方式找到ICollection的Count方法的任务,而您期望的是IEnumerable,那么构建类似Dictionary的东西可能是值得的,这样一旦您发现CatList实现了ICollection.Count您可以为将其参数转换为ICollection的方法构造一个委托,对其调用Count并返回结果。如果你有这样一个字典,那么如果你有另一个CatList,你将能够简单地从字典中调用委托。以上是C#学习教程:在不考虑泛型类型参数共享的全部内容的情况下,检查类型是否实现了通用接口。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
