如何在C#中打印任意维度的任意类型数组
在C#中实现任意维度、任意类型数组的打印
要实现任意维度、任意类型数组的格式化打印,核心思路是递归+类型判断:通过递归处理嵌套的数组元素,同时利用数组的通用遍历特性,无需提前知晓维度信息。
实现方案
下面是一个简洁的通用实现,输出格式符合你期望的嵌套方括号风格:
using System; using System.Text; public static class ArrayPrinter { // 将数组转换为格式化字符串 public static string ArrayToString(object array) { if (array == null) return "null"; // 判断输入是否为数组类型 if (!(array is Array arr)) return array.ToString(); var sb = new StringBuilder(); sb.Append('['); bool isFirstElement = true; // foreach自动适配多维数组的元素遍历,无需手动处理维度索引 foreach (var element in arr) { if (!isFirstElement) sb.Append(", "); // 递归处理元素:如果元素仍是数组则继续解析,否则直接转字符串 sb.Append(ArrayToString(element)); isFirstElement = false; } sb.Append(']'); return sb.ToString(); } // 直接打印数组 public static void PrintArray(object array) { Console.WriteLine(ArrayToString(array)); } }
测试示例
用不同维度、不同类型的数组验证效果:
public class Program { public static void Main() { // 你的示例:二维int数组 int[,] int2D = {{2,1}, {5,9}, {3,4}}; ArrayPrinter.PrintArray(int2D); // 输出:[[2, 1], [5, 9], [3, 4]] // 三维string数组 string[,,] str3D = {{{"a", "b"}, {"c", "d"}}, {{"e", "f"}, {"g", "h"}}}; ArrayPrinter.PrintArray(str3D); // 输出:[[[a, b], [c, d]], [[e, f], [g, h]]] // 一维匿名类型数组 var customArr = new[] { new { Name = "Alice", Age = 25 }, new { Name = "Bob", Age = 30 } }; ArrayPrinter.PrintArray(customArr); // 输出:[{ Name = Alice, Age = 25 }, { Name = Bob, Age = 30 }] } }
关键细节说明
- 维度适配:所有数组都实现了
IEnumerable,foreach会自动遍历多维数组的所有元素,无需手动处理每个维度的上下限。 - 类型兼容:支持值类型、引用类型、匿名类型。如果需要自定义类型的更友好输出,只需重写该类型的
ToString()方法即可。 - 异常防护:对
null输入直接返回"null",避免空引用异常。
内容的提问来源于stack exchange,提问作者AnDrEw
相关产品推荐
相关产品推荐

