C# 在新的.Net类型/TypeInfo API中,IsInstanceOfType或其等效项在哪里?
我已经阅读了,并且转换了我在PCL中包含“旧”API时使用的大部分代码,但是我没有找到C# 在新的.Net类型/TypeInfo API中,IsInstanceOfType或其等效项在哪里?,c#,portable-class-library,system.reflection,base-class-library,C#,Portable Class Library,System.reflection,Base Class Library,我已经阅读了,并且转换了我在PCL中包含“旧”API时使用的大部分代码,但是我没有找到IsInstanceOfType或与Type或TypeInfo等效的代码。它非常常用,所以我怀疑它是否被完全放在了新的API下,所以我打赌该功能刚刚被重命名或与其他功能合并在一起,我只是没有看到它。而不是 Type foo; BarType bar; if(foo.IsInstanceOfType(bar)) { ... } 我最终使用了 Type foo; BarType bar; if(bar.GetTy
IsInstanceOfType
或与Type
或TypeInfo
等效的代码。它非常常用,所以我怀疑它是否被完全放在了新的API下,所以我打赌该功能刚刚被重命名或与其他功能合并在一起,我只是没有看到它。而不是
Type foo;
BarType bar;
if(foo.IsInstanceOfType(bar)) { ... }
我最终使用了
Type foo;
BarType bar;
if(bar.GetType() == foo || bar.GetType().GetTypeInfo().IsSubclassOf(foo)) { ... }
在大多数情况下,它的工作原理似乎非常相似。使用此扩展方法:
public static bool IsInstanceOfType(this Type type, object obj){
return obj != null && type.GetTypeInfo().IsAssignableFrom(obj.GetType().GetTypeInfo());
}
这是我第一次读到它,所以它可能也存在于反射API中,但是在Roslyn API中有一个TypeInfo类(接口?)。也就是说,您可以使用
type(T)=typeof(E)
或.IsAssignableFrom
如果涉及继承,则平等性不起作用,IsAssignableFrom
如果有人开始对接口发狂,则不太一样。我确信这不是最有效的方法,但我通过类似于typeof(MyType)的操作解决了接口类型的问题。GetTypeInfo().ImplementedInterfaces.Any(i=>i==typeof(IMyInterface)),+几个用于检测继承和/或类型的扩展方法equality@Dan这是否意味着您无法在默认API中找到实现此功能的方法?@BryanAnderson不记得究竟是什么让我使用了typeof(t).GetTypeInfo().ImplementedInterfaces.Any(i=>i==typeof(TI))与其说是typeof(T).GetTypeInfo().IsAssignableFrom(typeof(TI).GetTypeInfo()),我想可能是睡眠不足。。。或者一个非常合理的理由:p,也许IsAssignableFrom的语义不像“你有这个接口吗?”这样的问题那么清晰。事实是。。。IsAssignableFrom(otherTypeinfo)应该可以很好地完成这个任务,