You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Android中typeof与GetType始终返回System.RuntimeType问题求助

解决Xamarin.Android中反射返回System.RuntimeType的问题

嘿,我之前在Xamarin.Android开发里也踩过这个反射类型的小坑!先给你捋清楚为啥会出现这种情况:

在Xamarin基于的Mono运行时环境中,Type接口的具体实现类就是System.RuntimeType——不管你用typeof(string)、typeof(int)还是自定义类的GetType(),返回的实例本质上都是RuntimeType的对象,这和桌面.NET Framework的表现确实不一样(桌面.NET里typeof()会返回对应类型的专属Type子类)。

但你不用慌,这完全是正常的平台实现差异!RuntimeType是Type的内部实现类,它完全遵守Type的公共接口规范。你真正需要关注的不是这个实现类的名称,而是通过Type暴露的公共属性和方法来判断、操作类型。

举个例子,如果你想判断某个类型是不是string,别去看GetType()的结果,而是直接和typeof(string)比较:

// 错误的判断方式(会拿到RuntimeType)
var targetType = typeof(string);
Console.WriteLine(targetType.GetType().FullName); // 输出 System.RuntimeType

// 正确的判断方式
if (targetType == typeof(string))
{
    Console.WriteLine("这确实是string类型!");
}

// 获取真实类型的名称
Console.WriteLine(targetType.FullName); // 输出 System.String

针对你开发的WebView AJAX反射场景,建议你:

  • 用Type.Name、Type.FullName来获取类型的真实标识
  • 用Type.IsAssignableFrom()、直接== typeof(目标类型)来做类型判断
  • 调用Type.GetMethod()、Type.GetProperty()等反射方法时,直接使用拿到的Type实例即可,不用管它的实际运行时类型

毕竟跨平台.NET开发的核心就是依赖抽象(这里的Type就是抽象),而非具体的实现类~

内容的提问来源于stack exchange,提问作者pinkie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:20:10