นี่เป็นคำตอบที่ขี้เกียจน้อยที่สุด (ฉันแค่ภูมิใจในคำตอบนี้ :)
ฉันไม่มี ReSharper ลองก่อน แต่ไม่ต้องการซื้อ ฉันลองแผนภาพคลาส แต่ไม่สามารถใช้งานได้จริงเพราะแผนภาพลำดับชั้นครอบคลุมโลก 3 เท่าและหน้าจอแล็ปท็อปของฉันไม่มีความกว้างไม่ จำกัด ดังนั้นวิธีแก้ปัญหาที่ง่ายและเป็นธรรมชาติของฉันคือการเขียนโค้ด Windows Forms บางตัวเพื่อวนซ้ำในประเภทแอสเซมบลีและใช้การสะท้อนเพื่อเพิ่มโหนดในมุมมองแบบต้นไม้ดังนี้
โปรดสมมติว่าคุณมีกล่องข้อความมุมมองแบบต้นไม้และสิ่งอื่น ๆ ที่จำเป็นสำหรับฟอร์มที่โค้ดนี้ทำงาน
//Go through all the types and either add them to a tree node, or add a tree
//node or more to them depending whether the type is a base or derived class.
//If neither base or derived, just add them to the dictionary so that they be
//checked in the next iterations for being a parent a child or just remain a
//root level node.
var types = typeof(TYPEOFASSEMBLY).Assembly.GetExportedTypes().ToList();
Dictionary<Type, TreeNode> typeTreeDictionary = new Dictionary<Type, TreeNode>();
foreach (var t in types)
{
var tTreeNode = FromType(t);
typeTreeDictionary.Add(t, tTreeNode);
//either a parent or a child, never in between
bool foundPlaceAsParent = false;
bool foundPlaceAsChild = false;
foreach (var d in typeTreeDictionary.Keys)
{
if (d.BaseType.Equals(t))
{
//t is parent to d
foundPlaceAsParent = true;
tTreeNode.Nodes.Add(typeTreeDictionary[d]);
//typeTreeDictionary.Remove(d);
}
else if (t.BaseType.Equals(d))
{
//t is child to d
foundPlaceAsChild = true;
typeTreeDictionary[d].Nodes.Add(tTreeNode);
}
}
if (!foundPlaceAsParent && !foundPlaceAsChild)
{
//classHierarchyTreeView.Nodes.Add(tn);
}
}
foreach (var t in typeTreeDictionary.Keys)
{
if (typeTreeDictionary[t].Level == 0)
{
classHierarchyTreeView.Nodes.Add(typeTreeDictionary[t]);
}
}
StringBuilder sb = new StringBuilder();
foreach (TreeNode t in classHierarchyTreeView.Nodes)
{
sb.Append(GetStringRepresentation(t, 0));
}
textBox2.Text = sb.ToString();