Đây là câu trả lời ít lười nhất (Tôi chỉ tự hào về câu trả lời này :)
Tôi không có ReSharper, đã thử nó trước đây nhưng không muốn mua nó. Tôi đã thử một sơ đồ lớp nhưng hoàn toàn không thực tế vì sơ đồ phân cấp trải khắp thế giới 3 lần và màn hình máy tính xách tay của tôi không có chiều rộng vô hạn. Vì vậy, giải pháp tự nhiên và dễ dàng của tôi là viết một số mã Windows Forms để lặp lại các loại trong một cụm và sử dụng sự phản chiếu để thêm các nút vào chế độ xem dạng cây, như sau:
vui lòng giả sử bạn có hộp văn bản, chế độ xem dạng cây và những thứ khác cần thiết trên một biểu mẫu trong đó mã này chạy
//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();