public void Add(MethodDetail key, List <MethodDetail> value)
 {
     foreach (var item in value)
     {
         this.Add(key, item);
     }
 }
        //public IEnumerable<List<string>> TracePath(MethodDetail method)
        //{
        //    foreach (var item in this[method.MethodFullName])
        //    {
        //        List<string> methods = new List<string>() { method.MethodFullName };
        //        yield return methods.AddRange((TracePath(item)));
        //    }
        //}

        //private List<List<string>> TracePath(string method)
        //{
        //    List<List<string>> result = new List<List<string>>();
        //    if (this.ContainsKey(method))
        //    {
        //        foreach (var item in this[method])
        //        {
        //            var tracePathResult = TracePath(item);
        //            foreach (var path in tracePathResult)
        //            {
        //                path.Insert(0, method);
        //            }
        //            return tracePathResult;
        //        }
        //    }
        //    result.Add(new List<string>() { method });
        //    return result;
        //}
        public IEnumerable <List <string> > TracePath(MethodDetail method)
        {
            List <List <string> > result = new List <List <string> >();

            foreach (var item in this[method.MethodFullName])
            {
                result = TracePath(item, new List <string>()
                {
                    method.MethodFullName
                });
            }
            return(result);
        }
        public void Add(MethodDetail key, MethodDetail value)
        {
            List <string> detail = null;

            if (_filterBy == null ||
                key.MethodFullName.Contains(_filterBy))
            {
                if (base.TryGetValue(key.MethodFullName, out detail))
                {
                    var key1 = base.Keys.Where(item => item.Equals(key.MethodFullName)).FirstOrDefault();
                    if (key1 == null)
                    {
                        throw new Exception("Key Collision");
                    }
                    detail.Add(value.MethodFullName);
                }
                else
                {
                    detail = new List <string>();
                    detail.Add(value.MethodFullName);
                    base.Add(key.MethodFullName, detail);
                }
            }
        }