gpt4 book ai didi

c# - 使用 C# 和反射打印完整的对象图

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:49 26 4
gpt4 key购买 nike

我有一个复杂的对象

class A
{
int Field1;
int field2;
property ClassB ClassB;
property classC classC;
etc etc....

}

我想使用反射打印完整的对象图。有什么好的代码吗?

最佳答案

极简主义的替代方案,能够以可读的格式显示复杂的对象:

public static string Dump(object o, string name = "", int depth = 3)
{
try
{
var leafprefix = (string.IsNullOrWhiteSpace(name) ? name : name + " = ");

if (null == o) return leafprefix + "null";

var t = o.GetType();
if (depth-- < 1 || t == typeof (string) || t.IsValueType)
return leafprefix + o;

var sb = new StringBuilder();
var enumerable = o as IEnumerable;
if (enumerable != null)
{
name = (name??"").TrimEnd('[', ']') + '[';
var elements = enumerable.Cast<object>().Select(e => Dump(e, "", depth)).ToList();
var arrayInOneLine = elements.Count + "] = {" + string.Join(",", elements) + '}';
if (!arrayInOneLine.Contains(Environment.NewLine)) // Single line?
return name + arrayInOneLine;
var i = 0;
foreach (var element in elements)
{
var lineheader = name + i++ + ']';
sb.Append(lineheader).AppendLine(element.Replace(Environment.NewLine, Environment.NewLine+lineheader));
}
return sb.ToString();
}
foreach (var f in t.GetFields())
sb.AppendLine(Dump(f.GetValue(o), name + '.' + f.Name, depth));
foreach (var p in t.GetProperties())
sb.AppendLine(Dump(p.GetValue(o, null), name + '.' + p.Name, depth));
if (sb.Length == 0) return leafprefix + o;
return sb.ToString().TrimEnd();
}
catch
{
return name + "???";
}
}

关于c# - 使用 C# 和反射打印完整的对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com