String[]
相比, list<string>
重量轻。因此,如果我不需要操纵我的收藏,我应该使用string[]
还是总是建议去list<string>
?
如果是list<string>
,我们是否需要执行空检查或不需要?
答案 0 :(得分:37)
当您需要使用静态数组时使用string[]
:您不需要添加和删除元素 - &gt;仅按索引访问元素。如果您需要修改集合,请使用List<string>
。如果您打算只遍历内容并且永远不会通过索引访问IEnumerable<string>
。
答案 1 :(得分:8)
如果不应修改集合,请使用字符串[]或更好,IEnumerable<string>
。这表明字符串集合应被视为只读字符串集合。
在API中使用IEnumerable<string>
也可以在不破坏客户端代码的情况下更改底层实现。您可以轻松地使用字符串数组作为底层实现,并将其公开为IEnumerable<string>
。如果稍后阶段的实现更适合使用列表或其他结构,只要它支持IEnumerable<string>
,您就可以更改它。
答案 2 :(得分:4)
我说你自己总结得很好。
如果列表的大小不会改变,并且您不需要任何高级List函数(如排序),那么String []更可取,因为正如您所说的那样,它是轻量级的。
但是考虑潜在的未来需求 - 你有可能有一天想要使用List吗?如果是这样,请考虑立即使用List。
您需要在String []和List中检查null。两种类型都可以具有空值。
答案 3 :(得分:2)
我想说这取决于你想要完成的事情。但是,一般来说,我认为你可以访问一个很棒的框架,为你做了很多艰苦的工作,所以使用它(即使用List&lt;&gt;而不是数组)。
看一下像List&lt;&gt;这样的课程为您提供的会员你会明白我的意思:除了不必担心数组容量和索引越界异常之外,List和其他ICollection / IList类为你提供了添加,删除,清除,插入,查找等方法这是无限的帮助。我也相信
myList.Add (myWidg);
比
更好阅读和维护myArr [i] = myWidg;
答案 4 :(得分:1)
这真的取决于具体情况。任何真正与性能相关的东西都应该用数组完成。其他任何东西都会与列表一起使用。
答案 5 :(得分:1)
我肯定会投票给List。除了列表支持的各种成员函数之外,它还提供了“无元素”概念。可以有一个没有元素的列表,但不能有没有元素的数组。因此,如果我们遵循不从函数返回null的最佳实践,那么我们可以安全地检查元素的计数而不进行空检查。在数组的情况下,我们必须检查null。而且,我很少使用循环来搜索数组或列表中的元素。 LINQ只是使它整洁,我们可以使用List而不是数组。必须将数组转换为列表才能使用LINQ。