在 MonoDroid 中从 Java.Lang.Object 类型转换为本机 CLR 类型 [英] Type cast from Java.Lang.Object to native CLR type in MonoDroid

查看:48
本文介绍了在 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆