C#等价于java arraylist支持get,set和remove某些Index

saj*_*jad 16 c# java collections linked-list arraylist

我是一名Java程序员,之前我使用过Java ArrayList,现在我想在C#中使用类似的东西.我需要的一些选项在这个Java代码中:

String[] strs = new String[]{"str1" , "str2" , "str3" , "str4"};
ArrayList arrayList = new ArrayList(35);
arrayList.add(strs[0]);
arrayList.add(strs[1]);
arrayList.remove(0);
arrayList.set(0, strs[2]);
String s = (String) arrayList.get(1);
Run Code Online (Sandbox Code Playgroud)

我用C#ArrayListLinkedList,但他们没有,我需要这些简单的选项.C#中是否有另一个选项支持使用索引访问对象,插入和删除某些索引?

Tho*_*and 22

使用 List <T>

 String[] strs = new String[]{"str1" , "str2" , "str3" , "str4"};
 List<string> stringList = new List<string>();
 stringList.add(strs[0]);
 stringList.add(strs[1]);
 stringList.RemoveAt(indexYouWantToDelete)     
 String s = stringList[0];
Run Code Online (Sandbox Code Playgroud)

c#中的ArrayLists来自预通用时代.从C#2.0开始,我们就有了泛型集合,List <T>就是其中的一个例子.正如对这个答案的评论所说,如果你使用一个ArrayList,你放入arraylist的元素必须被加框(Object因为这是ArrayList唯一作为输入的东西).如果您想在此之后访问它们,则必须明确取消装箱,就像您在问题中所做的那样.( - > String s = (String) arrayList.get(1);)

使用泛型集合(如List <T>),不再有装箱,因为编译器知道列表将包含哪种数据类型.在这种情况下,字符串.你也可以有一个List<int>,List<char>或者List<whatever>,你可以对它们使用相同的索引功能.

  • 可能值得指出的是,'ArrayList`的使用是*不推荐,因为它是非泛型的并导致装箱. (2认同)
  • 以下是 C# 和 java 泛型与 C 模板之间的区别:http://stackoverflow.com/a/31929/284240。 (2认同)