C'est la réponse la moins paresseuse (je suis juste fier de cette réponse :)
Je n'ai pas ReSharper, je l'ai déjà essayé mais je n'ai pas voulu l'acheter. J'ai essayé un diagramme de classes mais ce n'est pas pratique du tout car le diagramme de hiérarchie s'étend sur 3 fois le monde et l'écran de mon ordinateur portable n'a pas une largeur infinie. Donc ma solution naturelle et facile a été d'écrire du code Windows Forms pour itérer sur les types dans une assemblée et utiliser la réflexion pour ajouter des nœuds à une vue arborescente, comme suit :
supposez que vous avez une zone de texte, une vue arborescente et d'autres éléments nécessaires sur un formulaire dans lequel ce code est exécuté.
//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();
2 votes
Avec Visual C# 2010 Express, je cherche la solution pour " : ActionResult". Ce n'est pas idéal, mais c'est mieux que rien.
2 votes
Je pense que vous comprenez mal ma question. JsonResult (référence ici : msdn.microsoft.com/fr/us/library/system.web.mvc.jsonresult.aspx ) hérite de ActionResult. Il existe plusieurs autres classes qui héritent de ActionResult. Quel est le moyen le plus simple de voir toutes les classes qui héritent de ActionResult ?
3 votes
Dans ce cas, le code que j'utilise n'est pas celui qui apparaît directement dans ma solution. Il s'agit de classes du framework MVC dans une autre assembly. La recherche de " : ActionResult" ne fonctionnera pas pour le code que j'utilise à partir d'une assembly.