我正在开发一个Xamarin.Android WebView应用程序,并试图使用Reflection实现一些AJAX方法,我注意到Object.GetType
和typeof
总是返回System.RuntimeType
。
无论我传递给他们的是什么都会发生这种情况 - 当我将string
,int
,MyClass
等传递给typeof时,以及当我在实例上调用GetType时,会发生这种情况。这些课程。
最小可运行代码很简单:
private class HybridWebViewClient : WebViewClient
{
public static type Test() {
Log.Debug("TypeDebug", typeof(string));
Log.Debug("TypeDebug", typeof(bool));
Log.Debug("TypeDebug", typeof(MyClass));
Log.Debug("TypeDebug", "test".GetType());
Log.Debug("TypeDebug", (34).GetType());
Log.Debug("TypeDebug", (new MyClass()).GetType());
}
}
以上所有打印“System.RuntimeType”。使用.NET编译的等效代码打印期望值 - System.String,System.Bool等
有没有其他人使用Xamarin.Android遇到过这个?如果是这样,有解决方法吗?它使我无法使用Reflection,我需要它在WebView中运行的JavaScript和应用程序本身之间传递信息
答案 0 :(得分:2)
Android.Util.Log.Debug/Info/...
期望string
作为第二个参数,所以我不确定你的代码是如何编译的......
您应该输出类型的字符串表示形式:
Log.Debug("TypeDebug", typeof(string).FullName);
Log.Debug("TypeDebug", typeof(bool).FullName);
Log.Debug("TypeDebug", "test".GetType().FullName);
Log.Debug("TypeDebug", (34).GetType().FullName);
或
Log.Debug("TypeDebug", $"{typeof(string)}");
Log.Debug("TypeDebug", $"{typeof(bool)}");
Log.Debug("TypeDebug", $"{"test".GetType()}");
Log.Debug("TypeDebug", $"{(34).GetType()}");
输出:
02-21 20:38:29.101 4243 4243 D TypeDebug: System.String
02-21 20:38:29.101 4243 4243 D TypeDebug: System.Boolean
02-21 20:38:29.101 4243 4243 D TypeDebug: System.String
02-21 20:38:29.101 4243 4243 D TypeDebug: System.Int32