以前,我能够检查某个类型是否可以从其他类型分配。我需要在通用基类中。
this.GetType().IsAssaignableFrom(otherObject.GetType())
如何在asp.net核心中实现相同的目标?
答案 0 :(得分:4)
点击此处:https://blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core/。特别是关于"反思"的部分。
引用:
C#var members = obj.GetType()。GetMembers();
变为
使用System.Reflection的C#; ... var members = 。obj.GetType()GetTypeInfo的()GetMembers();
显然,他们正在将其带回到.net核心的未来版本中。您可以在页面上看到它链接到Github上的这个不存在的页面:https://github.com/dotnet/apireviews/tree/master/2016-01-19-reflection,它显然描述了对反射命名空间的一系列更改。
答案 1 :(得分:1)
随着.NET Native的出现,我们拥有了一项技术,允许我们将您的应用程序静态链接到框架和第三方依赖项。为了使链接可行,重要的是它可以识别您未使用的框架部分。在其他技术中,例如C ++,这有点简单,因为这些系统没有诸如反射之类的动态。当然,.NET Native仍支持反射,但我们希望让平台更加实现付费播放,这意味着您无需为不使用的功能付费。对于反射尤其如此,因为它对运行时和编译器基于静态信息可以做什么施加了很大的限制。
理想情况下,反射应该是.NET Core中的一个可选组件,您可能决定不在您的应用程序中使用它。棘手的部分是System.Object依赖于Object.GetType()的反射。为了打破这种依赖性,我们决定System.Type不再代表完整的反射类型信息,而只代表类型名称。这意味着.NET Core中的System.Type不再包含GetMembers()等API,但会继续公开名称等API。
为了访问其他类型信息,您必须调用一个名为GetTypeInfo()的扩展方法,该方法位于System.Reflection中。它返回新类型TypeInfo,这是Type以前的类型。换句话说,像这样的一行代码:
C# var members = obj.GetType()。GetMembers();
变为
C# 使用System.Reflection; ... var members = obj.GetType()。GetTypeInfo()。GetMembers();