为什么可以';我在VisualStudio for Mac C#上找不到可识别的吗?(沙马林)

为什么可以';我在VisualStudio for Mac C#上找不到可识别的吗?(沙马林),c#,xamarin,C#,Xamarin,我发现这个方法(Type.IsAssignableFrom)非常方便,但是VS(对于Mac,Xamarin Forms project)将其标记为缺少的方法。(我皱着眉头问)对于与Xamarin一起工作的.Net版本,它是否已被弃用或丢失 这是我从msdn获得的代码: public class Example { public static void Main() { Type t = typeof(IEnumerable); Type c = typeof(Array); IE

我发现这个方法(Type.IsAssignableFrom)非常方便,但是VS(对于Mac,Xamarin Forms project)将其标记为缺少的方法。(我皱着眉头问)对于与Xamarin一起工作的.Net版本,它是否已被弃用或丢失

这是我从msdn获得的代码:

public class Example
{

public static void Main() {
  Type t = typeof(IEnumerable);
  Type c = typeof(Array);

  IEnumerable instanceOfT;
  int[] instanceOfC = { 1, 2, 3, 4 };
  if (t.IsAssignableFrom(c))
     instanceOfT = instanceOfC;
  }
}

由于Xamarin.Forms项目是一个具有多个目标框架的项目,因此您只能使用存在于所有目标中的东西

这可能会提供更多信息:

随着.NET Native的出现,我们有了一种技术,可以 将应用程序与框架和第三方静态链接 依赖关系。要使链接可行,重要的是它可以 确定框架中未使用的部分。换句话说 像C++这样的技术,这有点简单。 系统没有反射这样的动态性。当然可以.NET Native仍然支持反射,但我们希望实现这个平台 更多的付费游戏友好,这意味着你不必付费 您不使用的功能。反省尤其如此, 因为它对运行时和 编译器可以基于静态信息进行编译

所以理想情况下,反射应该是.NETCore中的可选组件 您可能决定根本不在应用程序中使用。这个 棘手的部分是系统。对象依赖于通过 对象。GetType()。为了打破这种依赖,我们决定 System.Type不再表示完全反射类型 信息,但仅限于类型名称。这意味着系统。键入 .NET核心不再包含GetMembers()之类的API,而是继续 公开API,如名称

为了访问其他类型信息,您必须 调用位于中的名为GetTypeInfo()的扩展方法 系统反射。它返回新类型TypeInfo,它是什么类型的 过去是

所以你应该这样做:

if (t.GetTypeInfo().IsAssignableFrom(c.GetTypeInfo()))

从项目中删除.NET核心目标也应该有效。

您是否有
使用系统包含在这个文件中?嗯,这并不能完全解释它。我在Forms项目中使用System.Reflection,它对于object.GetType().GetRuntimeProperties之类的方法(显示在代码完成选项中)似乎运行良好,但是找不到IsAssignableFrom。