繁体   English   中英

如何将C# object投射到Xamarin Android中的Java.lang object?

[英]How to cast C# object to Java.lang object in Xamarin Android?

Java.Util.Concurrent.PriorityBlockingQueue m_sensorDataQueue = new Java.Util.Concurrent.PriorityBlockingQueue();

m_sensorDataQueue.Add(c# to java object);

m_sensorDataQueue 是 java class 我想添加 c# object 到这个。

您可能正在寻找可以在NuGet System.Collections.Concurrent中找到的ConcurrentQueue

用法如下:

var queue = new ConcurrentQueue<TObject>();

// queue stuff
queue.Enqueue(myObject);
queue.Enqueue(myOtherObject);

// peek
queue.TryPeek(out var result);

// dequeue
queue.TryDequeue(out var result);

其中TObject是对象的类型。

For those looking for the answer to the title: "How to cast C# object to Java.Lang.Object in Xamarin Android?", I was able to do this with a wrapper class. Not sure if it's the best way, but I'我能够将我的 C# object 存储为 Java.Lang.Object 的属性。 老实说,我不知道这有多可靠或 memory 高效/线程安全等,但我的 C# class 都是信息性的:没有方法,只有简单数据类型的属性。

If you have access to the C# object class, and it's not already a class that is extending another class, and you don't care if there's java compiled in that code, you can make the C# class extend Java.Lang.Object:

public class MyCSharpObject : Java.Lang.Object
{
    public MyCSharpObject() { } //constuctor 
    ...
}

如果那不可能(您无权访问原始 class,或者需要将其保留为 C# object 以支持其他平台,例如 iOS),您可以创建一个扩展 Java.Lang.Object 的包装器并将 8890748892 类型用作财产:

public class MyCSharpObjectJava : Java.Lang.Object
{
    public MyCSharpObject MyObject;
    public MyCSharpObjectJava(MyCSharpObject myObject)
    {
        MyObject = myObject;
    }
}

创建一个新实例:

var jObj = new MyCSharpObjectJava(csObj);

然后在另一端访问原始的 class:

MyCSharpObject original = jObj.MyObject;

This is how I'm able to take my C# class object instance, assign it to a Java.Lang.Object wrapper and store it on a Google Maps Android Api marker as the Tag, and then on tapping the marker, able to convert it回到原来的object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM