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
相关产品推荐
相关产品推荐

