如何在Xamarin中为NSDictionary <NSString,NSObject>对象设置值?

Sha*_*yon 5 c# generics nsdictionary xamarin.ios xamarin

我需要与接收NSDictionary<NSString, NSObject>Xamarin 中类型对象的函数进行接口。

首先,我不了解语法。NSDictionary<NSString, NSObject>类型对象到底是什么?我知道有NSDictionary类型,我知道如何创建一个并设置键和值,但是什么是NSDictionary<?,?>?是否应该是某种特殊的元组?

其次,如何创建这样的对象并定义键和关联的对象?

Sve*_*übe 7

NSDictionary<TKey, TValue>只是的通用版本NSDictionary。这意味着键都是类型的TKey(在您的情况下NSString),而值都是类型的TValue(在您的情况下NSObject.)。这提供了更多的类型安全性,因为例如您不能将整数添加为键。底层的iOS对象仍然是NSDictionary。此类是“语法糖”的一种,因为我们习惯于严格输入C#并希望在任何可能的地方使用它。

您可以使用构造函数创建它。它具有多个构造函数。例如NSDictionary(TKey[] keys, TValue[] values),将键和值作为参数并创建NSDictionary它。

var keys = new[]
{
    new NSString("key1"),
    new NSString("key2"),
    new NSString("key3"),
    new NSString("key4")
};

var objects = new NSObject[]
{
    // don't have to be strings... can be any NSObject.
    new NSString("object1"),
    new NSString("object1"),
    new NSString("object1"),
    new NSString("object1")
};

var dicionary = new NSDictionary<NSString, NSObject>(keys, objects);
Run Code Online (Sandbox Code Playgroud)


Kar*_*ndo 6

在 Xamarin.Mac 和 Sven-Michael Stübe 之后,它可以是:

var dictionary = new NSDictionary(
    new NSString("key1"), new NSString("object1"),
    new NSString("key2"), new NSString("object2")
);
Run Code Online (Sandbox Code Playgroud)

可能也是 Xamarin.iOS,但我没有测试。