在 MonoDroid 中从 Java.Lang.Object 类型转换为本机 CLR 类型 [英] Type cast from Java.Lang.Object to native CLR type in MonoDroid
本文介绍了在 MonoDroid 中从 Java.Lang.Object 类型转换为本机 CLR 类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何将 Java.Lang.Object 转换为某种本机类型?
How to cast Java.Lang.Object to some native type?
示例:
ListView 适配器包含本机类型消息的实例.当我尝试从 ListView 获取 SelectedItem 时,它返回转换为 Java.Lang.Object 的 Message 类型实例,但我找不到将 Java.Lang.Object 转换回 Message 的解决方案.
ListView adapter contains instances of native type Message. When i am trying to get SelectedItem from ListView it returns instance of Message type casted to Java.Lang.Object, but I can't find solution to cast Java.Lang.Object back to Message.
var message = (Message)list.SelectedItem;
// throws Error 5 Cannot convert type 'Java.Lang.Object' to 'Message'
请帮忙.
推荐答案
经过长时间的调试,找到了解决方案:
After long time debuging, have found the solution:
public static class ObjectTypeHelper
{
public static T Cast<T>(this Java.Lang.Object obj) where T : class
{
var propertyInfo = obj.GetType().GetProperty("Instance");
return propertyInfo == null ? null : propertyInfo.GetValue(obj, null) as T;
}
}
使用示例:
var message = list.GetItemAtPosition(e.Position).Cast<Message>();
bundle.PutInt("Message", message.ID);
经过仔细的 sdk 研究发现 MonoDroid 集成扩展用于此目的:
After careful sdk study have found MonoDroid integrated extension for this purpose:
public static TResult JavaCast<TResult>(this Android.Runtime.IJavaObject instance)
where TResult : class, Android.Runtime.IJavaObject
Member of Android.Runtime.Extensions
这篇关于在 MonoDroid 中从 Java.Lang.Object 类型转换为本机 CLR 类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文