【问题标题】:C# arrays, how to create empty array?C#数组,如何创建空数组?
【发布时间】:2013-11-01 23:04:23
【问题描述】:

我正在学习 c#,之前我的主要语言是 php。我想知道如何(或是否)可以在 c# 中创建一个空数组。

在 php 中,您可以创建一个数组,然后向其中添加任意数量的条目。

$multiples=array();
$multiples[] = 1;
$multiples[] = 2;
$multiples[] = 3;

在 c# 中,我在做类似的事情时遇到了麻烦:

int[] arraynums = new int[];
arraynums[] = 1;
arraynums[] = 2;
arraynums[] = 3;

这会给出错误“数组创建必须具有数组大小或数组初始值设定项”。如果我不知道要输入多少个条目,我该怎么做?有没有办法解决这个问题?

【问题讨论】:

  • 数组有静态大小,使用列表
  • 我不确定,但我认为 C# 作为大多数编程语言不允许创建具有动态大小的数组。
  • PHP 中的数组更像是 C# 中的字典,它们不是真正的老式数组,而是一个动态对象。另一方面,C# 数组是静态的,更接近于它们在 C 和 C++ 中的状态。要模仿 PHP 的数组,请改用列表或字典。 [我觉得 PHP 教数组弯曲和扭曲有点难过]

标签: c# php arrays


【解决方案1】:

如果您事先不知道大小,请使用List<T> 而不是数组。数组,在 C# 中是固定大小的,创建时必须指定大小。

var arrayNums = new List<int>();
arrayNums.Add(1);
arrayNums.Add(2);

添加项目后,您可以按索引提取它们,就像使用数组一样:

int secondNumber = arrayNums[1];

【讨论】:

  • 在什么情况下数组会更好(我现在正在谷歌搜索,真的很快)?
  • @JamesG。它们在 C# 中很少使用。如果您提前知道您将拥有多少物品,并且您知道它永远不会改变,它们会很有用。否则,使用List&lt;T&gt; 或其他集合类型。
  • stackoverflow.com/questions/434761/… 是的,这将是迄今为止我发现的最大差异。
【解决方案2】:

c# 数组具有静态大小。

int[] arraynums = new int[3];

int[] arraynums = {1, 2, 3}

如果你想使用动态大小的数组,你应该使用ArrayList,或者List。

【讨论】:

    【解决方案3】:

    我建议使用不同的集合,例如 List&lt;T&gt;Dictionary&lt;TKey, TValue&gt;。在 PHP 中将集合称为数组只是用词不当。数组是一个连续的固定大小的内存块,它只包含一种类型,并通过计算给定索引的偏移量来提供直接访问。 PHP 中的数据类型不做这些事情。

    例子;

    List<int> my_ints = new List<int>();
    my_ints.Add(500);
    
    
    Dictionary<string, int> ids = new Dictionary<string, int>();
    ids.Add("Evan", 1);
    
    int evansId = ids["Evan"];
    

    何时使用数组的示例;

    string[] lines = File.ReadAllLines(myPath);
    for (int i = 0; i < lines.Length; i++)
        // i perform better than other collections here!
    

    【讨论】:

      【解决方案4】:

      较新的方式,从 .NET 4.6 / Core 1.0 开始,以防有人遇到这个问题:

      System.Array.Empty&lt;T&gt;() 方法。

      如果多次调用,效率会更高,因为它由编译时生成的单个静态只读数组支持。

      https://docs.microsoft.com/en-us/dotnet/api/system.array.empty https://referencesource.microsoft.com/#mscorlib/system/array.cs,3079

      【讨论】:

        【解决方案5】:

        试试这个帖子:Dynamic array in C#。它在第一个答案中有几个链接,显示了索引数据的替代方式。在 C# 中,没有办法制作动态数组,但这些链接显示了一些解决方法。

        【讨论】:

          猜你喜欢
          • 2021-06-11
          • 2020-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多