【发布时间】:2019-09-08 00:12:00
【问题描述】:
我已经看到很多关于这个的问题,但我还没有看到任何关于递归执行的问题。我创建了一些扩展方法,它们在深度为 1 时可以很好地进行漂亮的打印。它看起来像这样:
public static string PrettyToString<K, V>(this Dictionary<K, V> dictionary)
{
string result = "{";
foreach (var kvp in dictionary)
{
result += $"({kvp.Key}, {kvp.Value}) ";
}
result += "}";
return result;
}
public static string PrettyToString<T>(this List<T> list)
{
string result = "{";
foreach (var element in list)
{
result += $"{element}, ";
}
result += "}";
return result;
}
public static string PrettyToString<T>(this T [] list)
{
string result = "{";
foreach (var element in list)
{
result += $"{element}, ";
}
result += "}";
return result;
}
但是,如果 K、V 或 T 是另一个集合,如 List 或 Dictionary?我想递归漂亮地打印,但我不知道该怎么做。结果,我的输出如下所示:
{(foo, System.Collections.Generic.Dictionary`2[System.String,System.Boolean])...
我希望它看起来像这样:
{(foo, {(bar, true)})...
我正在寻找无论嵌套类型如何都可以递归打印的方法:
var x = new List<Dictionary<string, string>>();
var y = new Dictionary<Dictionary<string, string>, string>>();
var z = new Dictionary<Dictionary<string, string>, List<string>>>();
...
x.PrettyToString();
y.PrettyToString();
z.PrettyToString();
应该全部递归打印出内容。我如何做到这一点?
【问题讨论】:
-
您的第二个方法可以更改为接受
IEnumerable<T>,而无需修改方法的主体,允许它支持其他集合类型,例如T[]和HashSet。这样可以摆脱多余的第三种方法。 -
@Amy 谢谢你的提示 :)
标签: c#