2012-03-11 12 views
7

Zawsze, gdy debuguję fragment kodu, który zawiera tablice lub listy int, double, string, etc /, wolę drukować je czasem. W tym celu piszę przeciążone metody printArray/printList dla różnych typów.Powszechna metoda drukowania tablic i list wszystkich typów

np.

mogę mieć te 3 metody tablic drukowania różnych typów

public void printArray(int[] a); 

public void printArray(float[] b); 

public void printArray(String[] s); 

Choć to działa na mnie, ja wciąż chcę wiedzieć, czy jest możliwe, aby mieć ogólną metodę, która drukuje tablice/list dowolny typy. Można to również rozszerzyć na tablicę/listę obiektów.

Odpowiedz

32

Istnieje przydatna metoda String.Join<T>(string separator, IEnumerable<T> values). Możesz przekazać tablicę lub listę lub dowolną kolekcję zliczającą dowolne obiekty, ponieważ obiekty będą konwertowane na łańcuchy przez wywołanie .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

Tablice i ogólne listy zarówno implementują IEnumerable<T>, więc użyj go jako typ parametru.

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

można zrobić ogólny sposób jak ten

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

Oto metoda rozszerzenie odpowiednie do debugowania:

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