打印任何类型的数组和列表的常用方法

本文关键字:列表 常用 方法 数组 任何 类型 打印 | 更新日期: 2023-09-27 18:27:36

每当我调试一段涉及int、doubles、string等数组或列表的代码时,我有时更喜欢打印它们。我为此所做的是为不同类型编写重载的printArray/printList方法。

例如

我可能有这3种方法来打印各种类型的阵列

public void printArray(int[] a);
public void printArray(float[] b);
public void printArray(String[] s);

尽管这对我有效,但我仍然想知道是否有可能有一个通用方法来打印任何类型的数组/列表。这也可以扩展到对象的数组/列表吗。

打印任何类型的数组和列表的常用方法

有一个有用的String.Join<T>(string separator, IEnumerable<T> values)方法。您可以传递数组、列表或任何对象的任何可枚举集合,因为对象将通过调用.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"

数组和泛型列表都实现IEnumerable<T>,所以只需将其用作参数类型即可。

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

这里有一个适合调试的扩展方法:

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

您可以制作一个类似的通用方法

    public static void print<T>(T[] data)
    {
        foreach (T t in data) {
            Console.WriteLine(t.ToString());
        }
    }