Rejoindre la collection d'objets en chaîne séparée par des virgules
Dans de nombreux endroits dans notre code, nous avons des collections d'objets, à partir de laquelle nous avons besoin de créer une liste séparée par des virgules. Le type de collecte varie: il peut être une Table de données à partir de laquelle nous avons besoin d'une certaine colonne, ou une Liste<Client>, etc.
Maintenant, nous bouclons la collecte et l'utilisation de concaténation de chaîne, par exemple:
string text = "";
string separator = "";
foreach (DataRow row in table.Rows)
{
text += separator + row["title"];
separator = ", ";
}
Est-il un meilleur modèle pour cela? Idéalement, je voudrais une approche que nous pourrions réutiliser par simple envoi d'une fonction permettant d'obtenir le champ droit/propriété/colonne de chaque objet.
Vous devez vous connecter pour publier un commentaire.
System.Array does not contain a definition for 'Convert'
ConvertAll
code
chaîne.Join(",", (de s dans les requêtes select s.ToString()).ToArray());code
Utiliser comme ceci:
ou:
Je n'ai pas de compilateur à la main, mais en théorie ça devrait fonctionner. Et comme chacun le sait, dans la théorie, la pratique et la théorie sont les mêmes. Dans la pratique, ils ne sont pas.
J'ai trouvé chaîne.Rejoindre et Lambda Select> aide à écrire de code minimum.
Dans .NET 4, vous pouvez simplement faire
string.Join(", ", table.Rows.Select(r => r["title"]))
Vous pouvez écrire une fonction qui transforme un IEnumerable dans une chaîne séparée par des virgules
Vous pouvez ensuite utiliser Linq pour interroger votre collection/dataset/etc pour fournir la stringList.
En aparté: La première modification que je voudrais faire est d'utiliser la Classe StringBuilder au lieu de simplement une Chaîne de caractères, il ne vous économiser des ressources pour vous.
J'adore Matt Howells réponse dans ce post:
J'ai dû le faire en une extension:
Utilisation: [ je reçois tous les mails et de les transformer en un csv chaîne pour les e-mails ]:
sb.ToString().TrimEnd(',');
pour supprimer la virgule. Elle est plus en fonction et si il n'y a pas d'éléments dans le énumérable de passer, sa fonction serait de jeter un ne peut pas-être-moins-que-zéro-erreur de longueur depuis 0 - 1 = -1.Pour les collections, vous pouvez utiliser cette méthode, par exemple:
Vous pouvez sélectionner n'importe quelle propriété que vous souhaitez séparer.
Voici mon préféré réponse adaptée à la question,
et corrigé Convertir ConvertAll: