什么是 NSMutableArray
和 NSArray
在 C# 中的等效物?
C# 是否有可变和不可变类型?我注意到默认情况下 string
是可变的。
作为额外奖励,我如何快速填充 C# 中的数组?
什么是 NSMutableArray
和 NSArray
在 C# 中的等效物?
C# 是否有可变和不可变类型?我注意到默认情况下 string
是可变的。
作为额外奖励,我如何快速填充 C# 中的数组?
NSMutableArray
和NSArray
的弱类型特性,那么在C#中(至少对于.NET 2.0及以上版本),对应的分别是ArrayList
和object[]
。例如,在Objective-C代码中如果只有NSString
对象在NSMutableArray
中,你可以使用List<string>
,而如果它们在NSArray
中,则应使用指定大小的string[]
。List<string> list = new List<string> { "foo", "bar", "baz" };
string[] array = { "foo", "bar", "baz" }; // Shortcut syntax for arrays
在C#中,string
是不可变的,就像Foundation框架中的NSString
一样。每次你将一个新字符串分配给一个变量时,你只是把变量指向或引用另一个对象。List<String> stringList = new List<String>();
stringList.Add("Test");
C#中的字符串是不可变的。相当于NSMutableString的类是StringBuilder。
C#与Objective-C不同,方法名称并不能清晰地表示其意图。
例如,String和StringBuilder两个类都有一个名为Replace的方法,你可能会认为它们都是用来替换字符的。
但实际上,String.Replace替换并返回新的字符串,而StringBuilder.Replace则进行就地替换。
大多数类中的大多数方法在C#(以及Java)中也是如此运作的。
在Obj-C中,命名约定很明确,要么是:
[NSString stringByReplacing...]
[NSMutableString replace...]
对于使用C#的Xamarin.iOS:
string[] pickerItemsArray;
pickerItemsArray = new string[]{"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
string[]
而不是 List
或 ArrayList
意味着该对象在内存中仍然是不可变的。 - Chad
ArrayList
。 - BoltClockNSArray
是完全不可变的:你不能替换数组中已有的成员,所以它并不完全等同于object[]
。据我所知,.NET Framework
中没有与NSArray
完全相等的东西(但这也不是什么大问题)。 - zneak