Chaque fois que je débogue un morceau de code qui implique des tableaux ou des listes d’entiers, de doublons, de chaînes de caractères, etc., je préfère les imprimer de temps en temps. Ce que je fais pour cela, c'est écrire des méthodes printArray/printList surchargées pour différents types.
par exemple.
Je peux avoir ces 3 méthodes pour imprimer des matrices de différents types
public void printArray(int[] a);
public void printArray(float[] b);
public void printArray(String[] s);
Bien que cela fonctionne pour moi, je veux toujours savoir s'il est possible d'avoir une méthode générique qui imprime des tableaux/listes de tous types. Cela peut-il également être étendu au tableau/à la liste d'objets?.
Il existe une méthode String.Join<T>(string separator, IEnumerable<T> values)
utile. Vous pouvez transmettre un tableau, une liste ou toute collection énumérable d'objets car ceux-ci seront convertis en chaîne en appelant .ToString()
.
int[] iarr = new int[] {1, 2, 3};
Console.WriteLine(String.Join("; ", iarr)); // "1; 2; 3"
string[] sarr = new string[] {"first", "second", "third"};
Console.WriteLine(String.Join("\n", sarr)); // "first\nsecond\nthird"
Les tableaux et les listes génériques implémentent tous IEnumerable<T>
, utilisez-le donc simplement comme type de paramètre.
public void PrintCollection<T>(IEnumerable<T> col)
{
foreach(var item in col)
Console.WriteLine(item); // Replace this with your version of printing
}
public void printArray<T>(IEnumerable<T> a)
{
foreach(var i in a)
{
Console.WriteLine(i);
}
}
Voici une méthode d'extension appropriée pour le débogage:
[Conditional("DEBUG")]
public static void Print<T>(this IEnumerable<T> collection)
{
foreach(T item in collection)
{
Console.WriteLine(item);
}
}