【问题标题】:Why choose a list over array? [duplicate]为什么选择列表而不是数组? [复制]
【发布时间】:2016-04-24 23:36:44
【问题描述】:

我正在做一个项目,我注意到该人使用列表来表示一段代码。如果是我,我会出于个人喜好而使用数组,因为这是我所知道的。看看下面的代码,选择列表对数组有什么好处?

List<string> errors = new List<string>();

if (ddDirector.SelectedItem.Value == "") 
   errors.Add("You must select an item in the Director list.");

if (errors.Count > 0)
{
   ErrorList.InnerHtml = "Please correct the following issues below:<br/><ul>";
   foreach (string e in errors)
   {
      ErrorList.InnerHtml += String.Format("<li>{0}</li>", e);
   }
   ErrorList.InnerHtml += "</ul>";
}
return (errors.Count()==0);

【问题讨论】:

  • A List 具有在给定位置或从开头或结尾轻松添加和减去元素的方法以及许多其他方法。 msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx
  • 老实说,根据我的经验,人们使用List&lt;T&gt; 是因为他们很懒且易于使用。但从性能角度来看,它并不总是最佳选择。
  • 如果您不确定项目的数量,请查看列表。
  • @CodingGorilla 公平地说,你用“根据我的经验”来限定它,但我仍然觉得这是一个粗略的概括。
  • Eric Lippert 的分析也很有用:blogs.msdn.microsoft.com/ericlippert/2008/09/22/…

标签: c# arrays list


【解决方案1】:

对于数组,在初始化之前需要知道集合的大小。

List 不需要它,因此它可以根据需要扩展。

顺便说一句,List 有一个 Count 属性,您可以使用它来代替 Count() 扩展方法。

【讨论】:

  • 数组有长度,你不必使用 Count()
  • @galenus 我知道,我指的是代码 sn-p。说他不必在那里使用扩展方法。我没有把它作为在数组上使用 List 的理由。
  • 其实你可以在数组和列表上使用Enumerable.Count。没有性能差异,因为该方法首先检查集合是否可以转换为ICollection&lt;T&gt;,列表和数组就是这种情况。然后使用该属性。
  • @David 对不起,没有明白你的意图
【解决方案2】:

数组具有固定大小。如果你没有完全填充它,你还必须有一个变量来存储数组中使用的插槽数。

列表通常包装一个数组,但负责分配更大的数组(如果需要)并跟踪使用的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2023-04-08
    • 2018-09-15
    • 1970-01-01
    • 2017-09-27
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多