我正在开发一个 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 和应用程序本身之间传递信息
最佳答案
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
关于c# - Xamarin.Android - typeof 和 GetType 始终返回 System.RuntimeType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914836/