Dites que j'ai une liste d'objets, et l'objet a une propriété de chaîne. Je veux obtenir une seule liste séparée par des virgules de la valeur de chaque propriété de chaîne de chaque objet dans la liste. est ici 1 façon de le faire (sans LINQ)Une autre question Linqification
StringBuilder result = new StringBuilder()
foreach(myObject obj in myList)
{
result.Append(obj.TheString);
result.Append(", ");
}
// then trim the trailing ", " and call ToString() on result, etc, etc...
Voici mon premier coup linqification. Y a-t-il un meilleur moyen?
string result = string.Join(", ", myList.Select(myObj => myObj.TheString).ToArray());
C'est une ligne de code, mais il ne semble pas très efficace pour moi - itérer la liste juste pour construire un tableau, juste pour itérer le tableau et construire une chaîne ... ouf!
Y a-t-il un meilleur moyen?
+1 Vraiment profiter des réponses comme ça qui montrent ce que Linq peut faire! Cela me fascine que vous pouvez définir le type de résultat à StringBuilder (bien sûr après avoir supprimé .ToString()) et définir un point d'arrêt, et trouver l'évaluation Linq a été faite avant de convertir en chaîne ... ce qui ajoute à ma confusion à propos de -appelé "évaluation différée" dans Linq ... mais ce n'est pas votre problème! :) J'ai enveloppé votre solution dans une méthode, puis utilisé StringBuilder.Remove pour se débarrasser de l'espace supplémentaire et de la virgule avant de convertir en chaîne. Expérimentera en faisant ceci dans une méthode d'extension. Merci ! – BillW
L'évaluation différée est différée pour produire 'StringBuilder', mais' StringBuilder' n'est pas différé - bien que rien n'empêche d'écrire un 'StringBuilder' paresseux aussi (et en théorie il est tout à fait possible d'avoir des ficelles basiques aussi, bien que cela aurait besoin du soutien du CLR). –