This question already has answers here:
Closed 3 months ago.
Whenever I am debugging a piece of code which involves arrays or lists of ints, doubles, strings, etc/, I prefer printing them over sometimes. What I do for this is write overloaded printArray / printList methods for different types.
for e.g.
I may have these 3 methods for printing arrays of various types
public void printArray(int[] a);
public void printArray(float[] b);
public void printArray(String[] s);
Though this works for me, I still want to know whether it is possible to have a generic method which prints arrays/lists of any types. Can this also be extended to array/list of objects.
There is useful String.Join<T>(string separator, IEnumerable<T> values)
method. You can pass array or list or any enumerable collection of any objects since objects will be converted to string by calling .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"
Arrays and generic lists both implement IEnumerable<T>
so just use it as your parameter type.
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);
}
}
Here's an extension method appropriate for debugging:
[Conditional("DEBUG")]
public static void Print<T>(this IEnumerable<T> collection)
{
foreach(T item in collection)
{
Console.WriteLine(item);
}
}
you can make a generic method like this
public static void print<T>(T[] data)
{
foreach (T t in data) {
Console.WriteLine(t.ToString());
}
}