web-dev-qa-db-fra.com

Comment créer une chaîne délimitée par des virgules à partir d'une liste de tableaux?

Je stocke une ArrayList of Ids dans un script de traitement que je souhaite cracher sous forme de liste délimitée par des virgules pour la sortie dans le journal de débogage. Y a-t-il un moyen de l'obtenir facilement sans passer en revue les choses?

EDIT: Merci à Joel d’avoir signalé la liste (Of T) disponible dans .net 2.0 et versions supérieures. Cela rend TONS plus facile si vous en avez.

75
Dillie-O

Oui, je réponds à ma propre question, mais je ne l'ai pas encore trouvée ici et je pensais que c'était plutôt compliqué:

... dans VB.NET:

String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))

... en C #

string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))

Le seul "casse-tête" est que ArrayList doit avoir les éléments stockés sous forme de chaînes si vous utilisez Option Strict pour vous assurer que la conversion a lieu correctement.

EDIT: Si vous utilisez .net 2.0 ou supérieur, créez simplement un objet de type List (Of String) et vous obtiendrez ce dont vous avez besoin. Un grand merci à Joel d'avoir soulevé cette question!

String.Join(",", TargetList.ToArray())
143
Dillie-O

Les solutions à ce jour sont toutes assez compliquées. La solution idiomatique devrait sans doute être:

String.Join(",", x.Cast(Of String)().ToArray())

Pas besoin d'acrobaties sophistiquées dans les nouvelles versions du framework. En supposant une version pas si moderne, ce qui suit serait le plus simple:

Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))

la deuxième solution de mspmsp est également une approche agréable, mais elle ne fonctionne pas car elle manque le mot clé AddressOf. Également, Convert.ToString est plutôt inefficace (beaucoup d’évaluations internes inutiles) et la classe Convert n’est généralement pas conçue de manière très propre. J'ai tendance à l'éviter, surtout depuis que c'est complètement redondant.

17
Konrad Rudolph

Quelque chose comme:

String.Join(",", myArrayList.toArray(string.GetType()) );

Ce qui fondamentalement boucle tu sais ...

EDIT

que diriez-vous:

string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
16
mspmsp

string.Join(" ,", myArrayList.ToArray()); Cela fonctionnera avec .net framework 4.5

7
bashburak
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()

ou

string.Concat(foo.ToArray().Select(a => a += ",").ToArray())

Mise à jour, car c'est extrêmement ancien. Vous devez bien sûr utiliser string.Join maintenant. Cela n'existait pas en option au moment de la rédaction.

1
Echostorm

Voici un exemple simple illustrant la création d'une chaîne délimitée par des virgules à l'aide de String.Join () à partir d'une liste de chaînes:

List<string> histList = new List<string>();
histList.Add(dt.ToString("MM/dd/yyyy::HH:mm:ss.ffff"));
histList.Add(Index.ToString());
/*arValue is array of Singles */
foreach (Single s in arValue)
{
     histList.Add(s.ToString());
}
String HistLine = String.Join(",", histList.ToArray());
1
Jim Lahman