Xamarin.Android - typeof和GetType始终返回System.RuntimeType

时间:2018-02-21 20:24:23

标签: c# android xamarin reflection types

我正在开发一个Xamarin.Android WebView应用程序,并试图使用Reflection实现一些AJAX方法,我注意到Object.GetTypetypeof总是返回System.RuntimeType

无论我传递给他们的是什么都会发生这种情况 - 当我将stringintMyClass等传递给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和应用程序本身之间传递信息

1 个答案:

答案 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