【问题标题】:array of string with unknown size未知大小的字符串数组
【发布时间】:2009-10-21 21:00:34
【问题描述】:

在c#.NET中不知道数组大小在哪里的字符串数组是怎么回事?

String[] array = new String[]; // this does not work

【问题讨论】:

标签: c# arrays


【解决方案1】:

您需要使用数组是否有特定的原因?如果您事先不知道尺寸,您可能想使用List<String>

List<String> list = new List<String>();

list.Add("Hello");
list.Add("world");
list.Add("!");

Console.WriteLine(list[2]);

会给你一个输出

!

MSDN - List(T)了解更多信息

【讨论】:

  • 它们会在我放入它们的顺序之后添加,所以我可以像数组 [int] 一样调用它们...
  • 它们将按照您添加它们的顺序添加,您可以使用索引器访问它们。编辑答案作为示例。
  • 是的,您仍然可以像使用数组一样为通用列表中的项目编制索引。
  • 我认为(并且我认为 MSDN 文档验证了这一点......) List 类的内部顺序是一个无法保证的实现细节。如果您需要确保顺序,例如数组,请使用队列。
  • 或者我只是在考虑排序顺序?
【解决方案2】:

您不必在实例化数组时指定其大小。

您仍然可以声明数组并在以后实例化它。例如:

string[] myArray;

...

myArray = new string[size];

【讨论】:

    【解决方案3】:

    您无法创建没有大小的数组。您需要为此使用一个列表。

    【讨论】:

      【解决方案4】:

      正如其他人所提到的,您可以使用List&lt;String&gt;(我同意这是一个更好的选择)。如果您需要String[](例如传递给需要它的现有方法),您始终可以从列表中检索一个数组(这是List&lt;T&gt;'s 内部数组的副本),如下所示:

      String[] s = yourListOfString.ToArray();
      

      【讨论】:

        【解决方案5】:

        你可以像下面这样声明一个空数组

        String[] arr = new String[]{}; // declare an empty array
        String[] arr2 = {"A", "B"}; // declare and assign values to an array
        arr = arr2; // assign valued array to empty array
        

        你不能像下面这样为上面的空数组赋值

        arr[0] = "A"; // you can't do this
        

        【讨论】:

          【解决方案6】:

          我想您可能正在寻找StringBuilder 课程。如果不是,则字符串形式的通用 List 类:

          List<string> myStringList = new List<string();
          myStringList.Add("Test 1");
          myStringList.Add("Test 2");
          

          或者,如果您需要绝对确保字符串保持有序:

          Queue<string> myStringInOriginalOrder = new Queue<string();
          myStringInOriginalOrder.Enqueue("Testing...");
          myStringInOriginalOrder.Enqueue("1...");
          myStringInOriginalOrder.Enqueue("2...");
          myStringInOriginalOrder.Enqueue("3...");
          

          请记住,对于 List 类,项目的顺序是一个实现细节,您不能保证它们会保持与您放置它们的顺序相同。

          【讨论】:

          • 他为什么要找StringBuilder?这没有意义
          • 看起来他正在尝试将几个字符串放在一起。我补充说,如果他想跟踪几个字符串,他可能想使用 List 类。此外,如果他需要保留订单,则使用 Queue 类。
          • "对于 List 类,项目的顺序是一个实现细节,您不能保证它们将保持与您放置它们的顺序相同。"这是不正确的。列表保留顺序:如果您执行一系列添加,然后迭代列表,项目将按照您添加它们的顺序排列。 (当然,您可以在列表中间显式插入项目、对列表进行排序等;但事情仍按您要求的顺序进行。)您可能正在考虑 Dictionary、HashSet 等。
          【解决方案7】:

          我假设数组大小是一个计算值。

          int size = ComputeArraySize();
          
          // Then
          
          String[] array = new String[size]; 
          

          【讨论】:

            【解决方案8】:

            您可以使用 List 字符串,然后在完成后使用 strings.ToArray() 来获取要使用的字符串数组吗?

            【讨论】:

              【解决方案9】:

              如果你以后知道数组的长度,你可以像这样创建初始数组:

              String[] array;
              

              当你知道长度后,你可以像这样完成初始化

              array = new String[42];
              

              【讨论】:

                【解决方案10】:

                如果你想在不知道大小的情况下使用数组,你必须先声明它,然后你可以像这样实例化它

                string[] myArray;
                ...
                ...
                myArray=new string[someItems.count];
                

                【讨论】:

                • 你看到这有答案了吗!这是什么时候创建的?如果你试图获得积分,那么我建议你看看新项目
                【解决方案11】:

                字符串[] 数组 = {};

                // 不为空,而是为空。

                【讨论】:

                  【解决方案12】:

                  string foo = "苹果、李子、樱桃";

                  string[] myArr = null;

                  myArr = foo.Split(',');

                  【讨论】:

                  • 这样转换字符串不好!事实并非如此。 NET split(Char()) 应该这样做!如果输入来自用户怎么办?您应该首先检查“,”?如果你硬编码一个字符串,那么你无论如何都知道大小! :)
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-12-16
                  • 1970-01-01
                  • 2013-12-18
                  • 2022-01-17
                  • 1970-01-01
                  • 2016-06-26
                  • 2016-03-03
                  相关资源
                  最近更新 更多