public void AddEventListener <T>(T evtKey, EventDelegate cb) where T : struct, IFormattable, IConvertible, IComparable { Type t = evtKey.GetType(); if (!evtDic.ContainsKey(t)) { evtDic[t] = new EventAction(); } EventAction act = evtDic[t]; act.AddEventListener(evtKey, cb); }