Ποιος είναι ο καθαρότερος τρόπος για να δημιουργήσετε μια λίστα τιμών συμβολοσειράς διαχωρισμένων με κόμμα από μια IList<string>
ή IEnumerable<string>
;
Το String.Join(...)
λειτουργεί σε ένα string[]
και μπορεί να είναι δυσκίνητο όταν τύποι όπως IList<string>
ή IEnumerable<string>
δεν μπορούν εύκολα να μετατραπούν σε πίνακα συμβολοσειρών.
.NET 4+
IList<string> strings = new List<string>{"1","2","testing"};
string joined = string.Join(",", strings);
Λύσεις λεπτομερειών και προ- .Net 4.0
Το IEnumerable<string>
μπορεί να μετατραπεί σε πίνακα συμβολοσειρών πολύ εύκολα με το LINQ (.NET 3.5):
IEnumerable<string> strings = ...;
string[] array = strings.ToArray();
Είναι αρκετά εύκολο να γράψετε την ισοδύναμη βοηθητική μέθοδο αν χρειαστεί:
public static T[] ToArray(IEnumerable<T> source)
{
return new List<T>(source).ToArray();
}
Στη συνέχεια, καλέστε την ως εξής:
IEnumerable<string> strings = ...;
string[] array = Helpers.ToArray(strings);
Στη συνέχεια μπορείτε να καλέσετε την εντολή string.Join
. Φυσικά, δεν χρειάζεται να χρησιμοποιήσετε μια βοηθητική μέθοδο:
// C# 3 and .NET 3.5 way:
string joined = string.Join(",", strings.ToArray());
// C# 2 and .NET 2.0 way:
string joined = string.Join(",", new List<string>(strings).ToArray());
Το τελευταίο είναι λίγο ακαταλαβίστικο όμως :)
Αυτός είναι πιθανότατα ο απλούστερος τρόπος για να το κάνετε, και αρκετά αποδοτικός επίσης - υπάρχουν και άλλες ερωτήσεις σχετικά με το πώς ακριβώς είναι η απόδοση, συμπεριλαμβανομένης (αλλά όχι μόνο) αυτής.
Από το .NET 4.0, υπάρχουν περισσότερες υπερφορτώσεις διαθέσιμες στο string.Join
, οπότε μπορείτε στην πραγματικότητα απλά να γράψετε:
string joined = string.Join(",", strings);
Πολύ πιο απλό :)
Μπορείτε να χρησιμοποιήσετε την .ToArray()
σε Lists
και IEnumerables
και στη συνέχεια να χρησιμοποιήσετε την String.Join()
όπως θέλετε.