【问题标题】:Array without fixed size [duplicate]没有固定大小的数组[重复]
【发布时间】:2020-12-23 22:02:15
【问题描述】:

前段时间开始学习C#,一直听说如果没有数组的大小,我应该一直选择list,因为没有大小就无法初始化数组。

话虽如此,我已经尝试实例化一个没有大小值的新数组,并且它可以正常工作。

string Input = "1-2-3";
string[] Lista = new string[] { };
Lista = Input.Split('-'); 
for(int i = 0; i < Lista.Length; i++)
{
    Console.WriteLine(Lista[i]);
}

输出:1 2 3。

我真的必须选择列表而不是数组,还是它是一个过时的概念?

【问题讨论】:

  • 像我在例子中那样使用是不是错了?
  • 确实,您创建了一个大小为 0 的数组,然后在创建新数组时将其丢弃(string.Split 的输出是一个数组)
  • List 是一个 T 数组的包装器。它只是用来管理使用数组将 T 存储在其中的复杂性。 (调整大小、复制等)。

标签: c# arrays list


【解决方案1】:

数组不能在没有大小的情况下初始化。当您执行string[] Lista = new string[] { }; 时,您创建了一个空字符串数组。如果您执行string[] Lista = new string[] { "Hello", "World" };,您将创建一个包含两个字符串的数组。大小从{...} 中的初始化列表的内容中隐含。

当您稍后执行Lista = Input.Split('-'); 时,您替换原来的空数组与来自Input.Split() 的新数组。

如果你想要一个可以添加/删除元素的数组,use a List&lt;&gt;

【讨论】:

    【解决方案2】:

    你上面的例子是错误的。

    当您执行Lista = Input.Split('-') 时,您会用包含 3 个项目的新数组覆盖旧数组(空数组)。

    为了调整数组的大小,您必须执行以下操作:

    string[] Lista = new string[] { "str1", "str2" };
    // Resize array
    Array.Resize<string>(ref Lista, 3);
    // Set value for new elements
    Lista[2] = "str3";
    

    小心,根据 MS 文档 (Array),我们有以下内容:

    该方法分配一个指定大小的新数组,复制 将旧数组中的元素转移到新数组中,然后替换旧数组 阵列与新的。数组必须是一维数组。

    因此,我会非常小心地使用这种操作,因为它是 CPU 密集型的。您最好的选择是使用List

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      相关资源
      最近更新 更多