[英]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.