2012-03-11 1 views
7

Cuando estoy depurando un fragmento de código que involucra matrices o listas de ints, dobles, cadenas, etc. /, prefiero imprimirlas a veces. Lo que hago para esto es escribir sobrecarga los métodos printArray/printList para diferentes tipos.Método común para imprimir matrices y listas de cualquier tipo

por ej.

puedo tener estos 3 métodos para matrices de impresión de varios tipos

public void printArray(int[] a); 

public void printArray(float[] b); 

public void printArray(String[] s); 

Aunque esto funciona para mí, todavía me gustaría saber si es posible tener un método genérico que imprime matrices/listas de cualquier tipos. ¿Esto también se puede extender a la matriz/lista de objetos?

Respuesta

32

No es útil String.Join<T>(string separator, IEnumerable<T> values) método. Puede pasar una matriz o una lista o cualquier colección enumerable de cualquier objeto, ya que los objetos se convertirán en cadena llamando al .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" 
5

Las matrices y las listas genéricas implementan IEnumerable<T> así que simplemente úselo como su tipo de parámetro.

public void PrintCollection<T>(IEnumerable<T> col) 
{ 
    foreach(var item in col) 
     Console.WriteLine(item); // Replace this with your version of printing 
} 
0

se puede hacer un método genérico como esto

public static void print<T>(T[] data) 
    { 
     foreach (T t in data) { 
      Console.WriteLine(t.ToString()); 
     } 
    } 
1
public void printArray<T>(IEnumerable<T> a) 
{  
    foreach(var i in a) 
    { 
     Console.WriteLine(i); 
    } 
} 
0

He aquí un método de extensión apropiada para la depuración:

[Conditional("DEBUG")] 
public static void Print<T>(this IEnumerable<T> collection) 
{ 
    foreach(T item in collection) 
    { 
     Console.WriteLine(item); 
    } 
} 
Cuestiones relacionadas