【问题标题】:Convert a list to a string in C#在 C# 中将列表转换为字符串
【发布时间】:2011-06-26 06:24:57
【问题描述】:

如何在 C# 中将列表转换为字符串?

当我在 List 对象上执行 toString 时,我得到:

System.Collections.Generic.List`1[System.String]

【问题讨论】:

  • A List 是一个集合,这个字符串应该是什么样子的?
  • 你可以尝试here提到的三种方法中的任何一种。
  • @Marko 喜欢在 java 中吗? ["element1","element2"]

标签: c# .net string list


【解决方案1】:

我将按照我的直觉去假设您想要连接在列表的每个元素上调用 ToString 的结果。

var result = string.Join(",", list.ToArray());

【讨论】:

    【解决方案2】:

    如果您希望将列表中的项目变成一个大长字符串,请执行以下操作:String.Join("", myList)。一些旧版本的框架不允许您将 IEnumerable 作为第二个参数传递,因此您可能需要通过调用 .ToArray() 将列表转换为数组。

    【讨论】:

      【解决方案3】:

      也许你正在尝试做

      string combindedString = string.Join( ",", myList.ToArray() );
      

      您可以将“,”替换为您要拆分列表中元素的内容。

      编辑:正如 cmets 中提到的,您也可以这样做

      string combindedString = string.Join( ",", myList);
      

      参考:

      Join<T>(String, IEnumerable<T>) 
      Concatenates the members of a collection, using the specified separator between each member.
      

      【讨论】:

      • 你的意思是string combineString = string.Join( ",", myList.ToArray());
      • 参数 '2':无法从 'System.Collections.Generic.List' 转换为 'string[]'
      • 我最近用过这个,它有效 - 只需省略 .ToArray()
      • @AdrianK 你是对的,因为 .Net 4.0 添加了传入任何 IEnumerable 的能力。然而 4.0 是在 2010 年 4 月发布的,在这个问题和答案发布之前,所以也许这里的人们还没有意识到它(除了下面的几个)
      • 对于 vb.net,Dim combineString As String = String.Join(",", myList.ToArray())
      【解决方案4】:

      很难说,但也许您正在寻找类似的东西:

      var myString = String.Join(String.Empty, myList.ToArray());
      

      这将隐式调用列表中每个项目的 ToString() 方法并将它们连接起来。

      【讨论】:

      【解决方案5】:

      引用类型的.ToString() 方法通常解析回System.Object.ToString(),除非您在派生类型中覆盖它(可能使用内置类型的扩展方法)。此方法的默认行为是输出调用它的类型的名称。所以你看到的是预期的行为。

      您可以尝试string.Join(", ", myList.ToArray()); 之类的方法来实现此目的。这是一个额外的步骤,但它可以放在System.Collections.Generic.List&lt;T&gt; 上的扩展方法中以使其更容易一些。像这样的:

      public static class GenericListExtensions
      {
          public static string ToString<T>(this IList<T> list)
          {
              return string.Join(", ", list);
          }
      }
      

      (请注意,这是徒手编写且未经测试的代码。我目前手头没有编译器。所以您需要尝试一下。)

      【讨论】:

      • 当我调用它而不是 ToString 或使用泛型参数执行它时,它确实有效。但我喜欢你使用扩展方法的想法:)
      【解决方案6】:

      你有一个List&lt;string&gt; - 所以如果你想把它们串联起来,像

      string s = string.Join("", list);
      

      可以工作(至少在 .NET 4.0 中)。第一个参数是分隔符。所以你也可以用逗号分隔等。

      您可能还想看看使用 StringBuilder 来执行串联,而不是形成一个列表。

      【讨论】:

        【解决方案7】:

        如果您想要比简单连接稍微复杂的东西,您可以使用 LINQ,例如

        var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");
        

        将采用 ["A", "B", "C"] 并产生 "(a)(b)(c)"

        【讨论】:

        • 使用带有种子的聚合作为第一个参数,以避免为空集合抛出 InvalidOperationException。
        【解决方案8】:

        String.Join(" ", myList)String.Join(" ", myList.ToArray())。第一个参数是子字符串之间的分隔符。

        var myList = new List<String> { "foo","bar","baz"};
        Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"
        

        根据您的 .NET 版本,您可能需要首先在列表中使用 ToArray()..

        【讨论】:

          【解决方案9】:

          你可以使用string.Join:

          List<string> list = new List<string>()
          {
              "Red",
              "Blue",
              "Green"
          };
          
          string output = string.Join(Environment.NewLine, list.ToArray());    
          Console.Write(output);
          

          结果是:

          Red    
          Blue    
          Green
          

          作为Environment.NewLine 的替代方案,您可以将其替换为您选择的基于字符串的行分隔符。

          【讨论】:

            【解决方案10】:

            正如其他人所提到的,您的问题的直接答案是String.Join

            不过,如果需要一些操作,可以使用Aggregate

            List<string> employees = new List<string>();
            employees.Add("e1");
            employees.Add("e2");
            employees.Add("e3");
            
            string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
            Console.WriteLine(employeesString);
            Console.ReadLine();
            

            【讨论】:

            • 在生产代码中确保你的列表有任何元素,否则它会抛出异常。
            【解决方案11】:

            当我尝试从文本文件中检索数据并将其存储在数组中然后将其分配给字符串变量时,此方法对我有帮助。

            string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");  
            string marRes = string.Join(Environment.NewLine, lines.ToArray());
            

            希望可以帮助某人!!!!

            【讨论】:

              【解决方案12】:

              这似乎对我有用。

              var combindedString = new string(list.ToArray());
              

              【讨论】:

                【解决方案13】:

                如果您的列表包含字段/属性并且您想使用特定值(例如 FirstName),那么您可以这样做:

                string combindedString = string.Join( ",", myList.Select(t=>t.FirstName).ToArray() );
                

                【讨论】:

                  【解决方案14】:
                  string strs="111,222,333"
                  string.Join(",",strs.Split(',').ToList().Select(x=>x.PadLeft(6,'0')).ToArray());
                  

                  输出

                  000111,000222,000333
                  

                  【讨论】:

                  • 欢迎来到 StackOverflow。请提供一些解释,而不仅仅是代码。
                  猜你喜欢
                  • 2020-02-19
                  • 1970-01-01
                  • 2015-02-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-03-31
                  • 1970-01-01
                  • 2013-12-05
                  • 2021-10-11
                  相关资源
                  最近更新 更多