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

C# 打印任何类型的数组和列表的常用方法,c#,debugging,generics,C#,Debugging,Generics,每当我调试一段涉及整数、双精度、字符串等数组或列表的代码时,我喜欢打印它们,而不是打印它们。我要做的是为不同类型编写重载的printary/printList方法 例如 我可能有这3种方法来打印各种类型的数组 public void printArray(int[] a); public void printArray(float[] b); public void printArray(String[] s); 虽然这对我很有效,但我仍然想知道是否有可能有一个通用方法来打印任何类型的数组

每当我调试一段涉及整数、双精度、字符串等数组或列表的代码时,我喜欢打印它们,而不是打印它们。我要做的是为不同类型编写重载的printary/printList方法

例如

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

public void printArray(int[] a);

public void printArray(float[] b);

public void printArray(String[] s);

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

数组和泛型列表都实现了
IEnumerable
,因此只需将其用作参数类型即可

public void PrintCollection<T>(IEnumerable<T> col)
{
    foreach(var item in col)
        Console.WriteLine(item); // Replace this with your version of printing
}
public void打印集合(IEnumerable col)
{
foreach(列中的var项)
Console.WriteLine(item);//将其替换为您的打印版本
}
有一种有用的方法。您可以传递任何对象的数组、列表或任何可枚举集合,因为对象将通过调用
.ToString()
转换为字符串


您可以创建这样的通用方法

    public static void print<T>(T[] data)
    {
        foreach (T t in data) {
            Console.WriteLine(t.ToString());
        }
    }
公共静态作废打印(T[]数据)
{
foreach(数据中的T){
Console.WriteLine(t.ToString());
}
}
公共void打印数组(IEnumerable a)
{    
foreach(a中的var i)
{
控制台写入线(i);
}
}

以下是一种适用于调试的扩展方法:

[Conditional("DEBUG")]
public static void Print<T>(this IEnumerable<T> collection)
{
    foreach(T item in collection)
    {
        Console.WriteLine(item);
    }
}
[条件(“调试”)]
公共静态无效打印(此IEnumerable集合)
{
foreach(集合中的T项)
{
控制台写入线(项目);
}
}

T[]中的参数将您绑定到仅使用数组。如果这是您的意图,您可以使用通用约束验证此方法的条目。在大多数情况下,最好使用IEnumerable作为“数组和泛型列表都实现IEnumerable”,正如Babcock所述。还值得注意的是,WriteLine中的“ToString”通常是必需的/冗余的,因为其中的所有对象都会转换为string。
public void printArray<T>(IEnumerable<T> a)
{    
   foreach(var i in a)
   {
        Console.WriteLine(i);
   }
}
[Conditional("DEBUG")]
public static void Print<T>(this IEnumerable<T> collection)
{
    foreach(T item in collection)
    {
        Console.WriteLine(item);
    }
}