如何在Xamarin Android中将C#对象转换为Java.lang对象?

8gsdolmq  于 2022-12-07  发布在  Android
关注(0)|答案(2)|浏览(145)
Java.Util.Concurrent.PriorityBlockingQueue m_sensorDataQueue = new Java.Util.Concurrent.PriorityBlockingQueue();

m_sensorDataQueue.Add(c# to java object);

m_sensorDataQueue是一个java类,我想在其中添加c#对象。

inn6fuwd

inn6fuwd1#

您可能正在寻找ConcurrentQueue,您可以在NuGet System.Collections.Concurrent中找到它。
用法如下:

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是对象的类型。

jobtbby3

jobtbby32#

对于那些寻找答案的标题:"如何在Xamarin Android中将C#对象转换为Java.Lang.Object?",我可以用一个 Package 类来实现这一点。不确定这是否是最好的方法,但我可以将我的C#对象存储为Java.Lang.Object的属性。老实说,我不知道这有多可靠或内存效率/线程安全等,但我的C#类是所有信息:没有方法,只有简单数据类型的属性。
如果您可以访问C#对象类,并且它还不是一个扩展另一个类的类,并且您不关心该代码中是否编译了java,则可以使C#类扩展Java.Lang.Object:

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

如果不可能(您无法访问原始类,或者需要将其保留为C#对象以支持iOS等其他平台),则可以创建一个 Package 器来扩展Java.Lang.Object并使用C#类型作为属性:

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

创建新示例:

var jObj = new MyCSharpObjectJava(csObj);

然后在另一端访问原始类:

MyCSharpObject original = jObj.MyObject;

这就是我如何能够取得我的C#类对象示例,将其分配给一个java.lang.object Package 器并将其存储在Google Maps Android Api标记器上作为Tag,然后在点击标记器时,能够将其转换回原始对象。

相关问题