在 C# 中建立逗號分隔列表

Fil Zjazel Romaeus Villegas 2023年1月30日 2022年4月20日
  1. 使用 String.Join() 方法在 C# 中建立逗號分隔列表
  2. 使用 LINQ 聚合方法在 C# 中建立逗號分隔列表
  3. C# 中使用 StringBuilder 方法建立逗號分隔列表
在 C# 中建立逗號分隔列表

本教程將演示如何使用 string.Join()LINQ Aggregate,StringBuilder 從諸如 IList<stringIEnumerable<string> 之類的容器建立逗號分隔的列表。

使用 String.Join() 方法在 C# 中建立逗號分隔列表

連線容器值的最簡單方法是 string.Join()string.Join() 函式獲取集合中的所有值,並將它們與任何定義的分隔符連線起來。使用此方法,你不僅可以製作用逗號分隔的列表,還可以製作任何其他分隔符。

string joined_str = string.Join(separator, source);

分隔符引數必須是字串,而源可以是任何資料型別的集合。

例子:

using System;
using System.Collections.Generic;

namespace StringJoin_Example
{
    class Program
    {
        static void Main(string[] args)
        {
            //Initialize the IList 
            IList<Int32> list_strings = new List<Int32> { 1, 2, 3};
            //Join the IList with a comma
            string joined_list = string.Join(", ", list_strings);
            //Print the results
            Console.WriteLine("From List: " + joined_list);

            //Initialize the IEnumerable
            IEnumerable<string> enum_strings = new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
            //Join the IEnumerable with a semi colon
            string joined_enum = string.Join("; ", enum_strings);
            //Print the results
            Console.WriteLine("From Enumerable: " + joined_enum);

            Console.ReadLine();
        }
    }
}

在上面的示例中,我們建立了兩個不同的源:整數列表和可列舉的字串列表。然後我們使用相同的 string.Join() 方法和兩個不同的分隔符將它們連線起來,然後將生成的字串列印到控制檯。

輸出:

From List: 1, 2, 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

使用 LINQ 聚合方法在 C# 中建立逗號分隔列表

加入集合值的另一個選項是使用 LINQ Aggregate 方法。雖然編碼方便,但這被認為是低效的,尤其是輸入越大。如果輸入計數小於 1,此方法也會丟擲錯誤,因此可能需要更多的錯誤處理以確保每次都能順利執行。

string joined_str = input.Aggregate((x, y) => x + ", " + y);

與第一種方法一樣,你可以使用任何字串輸入作為分隔符,但此方法將期望結果值與其輸入相同。例如,如果輸入集合是整數列表,則此函式將不起作用。

例子:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqAggregate_Example
{
    class Program
    {
        static void Main(string[] args)
        {
            //Initialize the IList 
            IList<string> list_strings = new List<string> { "List Sample 1", "List Sample 2", "List Sample 3"};
            //Join the IList with a comma using LINQ Aggregate
            string joined_list = list_strings.Aggregate((x, y) => x + ", " + y);
            //Print the results
            Console.WriteLine("From List: " + joined_list);

            //Initialize the IEnumerable
            IEnumerable<string> enum_strings = new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
            //Join the IEnumerable with a semi colon using LINQ Aggregate
            string joined_enum = enum_strings.Aggregate((x, y) => x + "; " + y);
            //Print the results
            Console.WriteLine("From Enumerable: " + joined_enum);

            Console.ReadLine();

        }
    }
}

在上面的示例中,我們使用 LINQ Aggregate 方法連線了兩個集合。變數 xy 可以更改為你喜歡的任何變數名稱。此方法背後的想法是,如果仍有要連線的值,它將前一個字串連線到下一個字串。

輸出:

From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

C# 中使用 StringBuilder 方法建立逗號分隔列表

我們將討論的最後一個選項是 StringBuilder 方法。與其他兩種方法相比,這種方法需要編寫更多程式碼,但允許進行更多自定義。在函式中,你可以新增更多步驟來修改你喜歡的值。例如,如果你傳遞日期時間列表,則可以在使用指定的 DateTime 格式時組合這些值。

例子:

using System;
using System.Collections.Generic;
using System.Text;

namespace StringBuilder_Example
{
    class Program
    {
        static void Main(string[] args)
        {
            //Initialize the IList 
            IList<string> list_strings = new List<string> { "List Sample 1", "List Sample 2", "List Sample 3"};
            //Join the IList with a comma using the StringBuilder method
            string joined_list = join_collection(", ", list_strings);
            //Print the results
            Console.WriteLine("From List: " + joined_list);

            //Initialize the IEnumerable
            IEnumerable<string> enum_strings = new List<string>() { "Enum Sample 1", "Enum Sample 2", "Enum Sample 3" };
            //Join the IEnumerable with a semi colon using the StringBuilder method
            string joined_enum = join_collection("; ", enum_strings);
            //Print the results
            Console.WriteLine("From Enumerable: " + joined_enum);

            Console.ReadLine();

        }

        static string join_collection<T>(string separator, IEnumerable<T> values)
        {
            //Initialize StringBuilder
            StringBuilder sb = new StringBuilder(); 
            
            //Intialize the item counter
            int ctr = 0; 
            foreach (T item in values)
            {
                string sep = ""; 
                if(ctr > 0)
                {
                    //If the first item from the value collection has already been added, use the specified separator
                    //This is to avoid printing the separator as the first value of the string
                    sep = separator;
                }
                
                //Append the separator and the value as a string
                sb.Append(sep);
                sb.Append(item.ToString());
                ctr++;
            }

            //Return the built string
            return sb.ToString(); 
        }        
        
    }
}

在上面的示例中,我們使用自定義函式 join_collection 加入集合,該函式接受字串分隔符和可列舉集合。然後使用 StringBuilder 將這些值連線在一起,並附加分隔符和集合值。

輸出:

From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3

相關文章 - Csharp List