Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在新的.Net类型/TypeInfo API中,IsInstanceOfType或其等效项在哪里?_C#_Portable Class Library_System.reflection_Base Class Library - Fatal编程技术网

C# 在新的.Net类型/TypeInfo API中,IsInstanceOfType或其等效项在哪里?

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

我已经阅读了,并且转换了我在PCL中包含“旧”API时使用的大部分代码,但是我没有找到
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)应该可以很好地完成这个任务,