10

我有以下课程

public class CVisitor : IVisitor
    {
        public int Visit(Heartbeat element)
        {
            Trace.WriteLine("Heartbeat"); 
            return 1;
        }
        public int Visit(Information element)
        {
            Trace.WriteLine("Information"); 
             return 1;
        }

    }

我想要一个带有映射的字典,每个参数类型都将映射到它的实现函数:心跳将被映射到public int Visit(Heartbeat element)

我想做类似以下的事情:

    _messageMapper = new Dictionary<Type, "what should be here ?" >();
    _messageMapper.Add(typeof(Heartbeat), "and how I put it here?" );

我应该用什么代替“这里应该有什么?” 和“我是怎么把它放在这里的?”

谢谢

4

3 回答 3

9
new Dictionary<Type, Func<object, int>>();

var cVisitor = new CVisitor();
_messageMapper.Add(typeof(Heartbeat), 
   new Func<object, int>(heartbeat => cVisitor.Visit((Heartbeat)heartbeat)) 
);
于 2012-07-16T12:09:19.723 回答
3

你知道ActionFunc对象吗?看起来像你在找什么。

var d = new Dictionary<Type, Action>();
d.Add(typeof(HeartBeat), ()=>Trace.WriteLine("todum todum"));

PS:谢谢YAG

于 2012-07-16T12:08:00.063 回答
1

您最好的选择是使用反射。
1. 使用 typeof(Visitor).GetMethods() 获取访问者类的所有方法(或所有称为“访问”的方法?)。
2. GetMethods 返回 MethodInfo 的 IEnumerable。GetParameters 将为您提供每个方法的参数。
3. 所以现在你可以建立你的 (Type, MethodInfo) 的字典
4. 使用 Invoke 来调用方法。

Rq :使用反射的一个优点是,如果您添加新方法,字典仍然是最新的。没有忘记添加方法的风险。

于 2012-07-16T12:25:01.820 回答