gpt4 book ai didi

c# - 在 MonoMac 中使用数组的正确方法

转载 作者:太空狗 更新时间:2023-10-30 03:41:24 27 4
gpt4 key购买 nike

我刚刚开始使用 MonoMac 开发一个项目,到目前为止它非常棒。但还有一些事情我不确定。例如:你如何使用数组?这是我发现的:当我从正在调用的方法返回 NSArray 并尝试获取该数组中的自定义对象之一时,我不断收到类似“cannot convert将 System.IntPtr 键入 MyType"。

NSArray groupArray = (NSArray)groupDictionary.ObjectForKey(key);
MyType myObject = (MyType)groupArray.ValueAt(0);

那是我返回的数组。但是如果我想自己创建一个数组呢? NSArray 的实现不允许我实例化它。所以如果我得到 MonoMac website对,我应该使用像这样的普通数组

int[] intArray = int[10];

分别是一个强类型数组,我不知道如何在 C# 中使用它。

那么去这里的路是什么?

谢谢
–f

最佳答案

一般来说,使用 NSArray 不是很有用,因为你最终会遇到上面描述的问题。

这就是为什么通常您应该将 NSArray 转换为强类型数组的原因。 MonoMac 低级运行时会代表您对所有回调执行此操作。

通常你会这样做:

YourType [] stronglyTyped = NSArray.ArrayFromHandle<YourType> (arrayIntPtrHandle);

请注意,NSArray 只能存储 NSObject,因此“YourType”需要是从 NSObject 派生的对象。

现在,如果您仍想使用 NSArray,您需要记住的是 ValueAt 返回底层对象句柄(IntPtr),要将其与 C# 一起使用,您需要将其转换为 NSObject。您使用 Runtime.GetNSObject 方法执行此操作,您可以将结果转换为最派生的类型:

YourType x = (YourType) Runtime.GetNSObject (NSArray.ValueAt (0));

也就是说,如果您使用 API 绑定(bind)工具来访问 Objective-C API,那么您就没有正确地绑定(bind)东西。您的契约(Contract) API 应该具有强类型版本,而不是 NSArray,因此:

 [Export ("getElements")]
NSArray GetElements ();

应该变成:

 [Export ("getElements")]
YourType [] GetElements ();

关于c# - 在 MonoMac 中使用数组的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com