I have 16 methods that take two parameters, and each of the two parameters can be either an \'Insertion\' or a \'Deletion\', both of which implement IFragment. I also have four
I've implemented DynamicDispatcher.cs which fulfills this need.
It uses reflection and a stack trace (a single one on construction) to generate a tree of overloads by parameter types. It handles bidirectional casting on base classes and implemented interfaces.
Since it's part of a larger project and doesn't have any documentation, here's an example use (from the same project):
public static void DeleteTreeNodeChild(BehaviorTree.Choice parentNode, BehaviorTree.Node childNode) {
parentNode.Children.Remove(childNode);
}
public static void DeleteTreeNodeChild(BehaviorTree.Optional parentNode, BehaviorTree.Node childNode) {
Debug.Assert(parentNode.Child == childNode);
parentNode.Child = null;
}
public static void DeleteTreeNodeChild(BehaviorTree.Repetition parentNode, BehaviorTree.Node childNode) {
Debug.Assert(parentNode.Child == childNode);
parentNode.Child = null;
}
public static void DeleteTreeNodeChild(BehaviorTree.Sequence parentNode, BehaviorTree.Node childNode) {
parentNode.Children.Remove(childNode);
}
private static DynamicDispatcher _deleteTreeNodeChildDynamicDispatcher;
public static void DeleteTreeNodeChild(BehaviorTree.Node parentNode, BehaviorTree.Node childNode) {
if (_deleteTreeNodeChildDynamicDispatcher == null) {
_deleteTreeNodeChildDynamicDispatcher = new DynamicDispatcher();
}
_deleteTreeNodeChildDynamicDispatcher.Dispatch