Erstellen einer kommagetrennten Liste in C#
-
Verwenden der Methode
String.Join()
zum Erstellen einer durch Kommas getrennten Liste inC#
-
Verwenden der LINQ-Aggregatmethode zum Erstellen einer durch Kommas getrennten Liste in
C#
-
Verwenden der StringBuilder-Methode zum Erstellen einer durch Kommas getrennten Liste in
C#
Dieses Tutorial zeigt, wie Sie eine durch Kommas getrennte Liste aus Containern wie IList<string
oder IEnumerable<string>
erstellen, indem Sie entweder string.Join()
, LINQ Aggregate,
oder StringBuilder
verwenden.
Verwenden der Methode String.Join()
zum Erstellen einer durch Kommas getrennten Liste in C#
Der einfachste Weg, die Werte eines Containers zu verbinden, wäre der string.Join()
. Die Funktion string.Join()
nimmt alle Werte in einer Sammlung und verkettet sie mit einem beliebigen definierten Trennzeichen. Mit dieser Methode können Sie nicht nur durch Kommas getrennte Listen erstellen, sondern auch beliebige andere Trennzeichen.
string joined_str = string.Join(separator, source);
Der Trennparameter muss eine Zeichenfolge sein, während die Quelle eine Sammlung eines beliebigen Datentyps sein kann.
Beispiel:
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();
}
}
}
Im obigen Beispiel haben wir zwei verschiedene Quellen erstellt: eine Liste mit ganzen Zahlen und eine aufzählbare Liste mit Zeichenfolgen. Wir haben sie dann mit der gleichen string.Join()
-Methode mit zwei verschiedenen Trennzeichen verbunden und dann die resultierenden Strings auf der Konsole ausgegeben.
Ausgabe:
From List: 1, 2, 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3
Verwenden der LINQ-Aggregatmethode zum Erstellen einer durch Kommas getrennten Liste in C#
Eine weitere Möglichkeit, die Werte einer Sammlung zusammenzuführen, wäre die Verwendung der Methode LINQ Aggregate
. Dies ist zwar bequem zu codieren, wird jedoch als ineffizient angesehen, insbesondere je größer die Eingabe ist. Diese Methode löst auch einen Fehler aus, wenn die Anzahl der Eingaben kleiner als eins ist, sodass möglicherweise mehr Fehlerbehandlung erforderlich ist, um sicherzustellen, dass dies jedes Mal reibungslos ausgeführt wird.
string joined_str = input.Aggregate((x, y) => x + ", " + y);
Wie bei der ersten Methode können Sie jede Zeichenfolgeneingabe als Trennzeichen verwenden, aber diese Methode erwartet, dass der Ergebniswert mit der Eingabe übereinstimmt. Wenn die Eingabesammlung beispielsweise eine Integer-Liste wäre, würde diese Funktion nicht funktionieren.
Beispiel:
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();
}
}
}
Im obigen Beispiel haben wir die beiden Sammlungen mit der Methode LINQ Aggregate
zusammengeführt. Die Variablen x
und y
können in beliebige Variablennamen geändert werden. Die Idee hinter dieser Methode ist, dass sie den vorherigen String mit dem nächsten String verkettet, falls noch Werte zum Verbinden vorhanden sind.
Ausgabe:
From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3
Verwenden der StringBuilder-Methode zum Erstellen einer durch Kommas getrennten Liste in C#
Die letzte Option, die wir besprechen werden, ist die Methode StringBuilder
. Im Vergleich zu den beiden anderen Methoden erfordert diese etwas mehr Code, der geschrieben werden muss, ermöglicht aber viel mehr Anpassungen. Innerhalb der Funktion können Sie weitere Schritte hinzufügen, um die Werte nach Belieben zu ändern. Wenn Sie beispielsweise eine Liste mit Datetimes übergeben, können Sie die Werte kombinieren, während Sie ein bestimmtes DateTime-Format verwenden.
Beispiel:
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();
}
}
}
Im obigen Beispiel haben wir die Sammlungen mit unserer benutzerdefinierten Funktion join_collection
verbunden, die ein Zeichenfolgentrennzeichen und eine aufzählbare Sammlung akzeptiert. Die Werte werden dann mit einem StringBuilder
zusammengefügt und die Separator- und Collection-Werte angehängt.
Ausgabe:
From List: List Sample 1, List Sample 2, List Sample 3
From Enumerable: Enum Sample 1; Enum Sample 2; Enum Sample 3