如何在Xamarin中为NSDictionary <nsstring,nsobject =“”>对象设置值?

时间:2016-09-24 13:41:01

标签: c# generics xamarin xamarin.ios nsdictionary

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

首先,我不懂语法。 究竟什么是NSDictionary<NSString, NSObject>类型的对象? 我知道有NSDictionary类型,我知道如何创建一个并设置键和值,但什么是NSDictionary<?,?>?它是否被认为是某种特殊的元组?

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

2 个答案:

答案 0 :(得分:5)

NSDictionary<TKey, TValue>只是NSDictionary的通用版本。这意味着密钥都是TKey类型(在您的情况下为NSString),并且值都是TValue类型(在您的情况下为NSObject.)。这提供了更多类型安全性,因为例如你不能将整数作为键添加。底层iOS对象仍然是NSDictionary。这个类是&#34;语法糖&#34;,因为我们习惯于在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);

答案 1 :(得分:0)

在Xamarin.Mac上,跟随Sven-MichaelStübe,它可以是:

var dictionary = new NSDictionary(
    new NSString("key1"), new NSString("object1"),
    new NSString("key2"), new NSString("object2")
);

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