public static bool HasCompatibleSignature(this MethodInfo method, MethodInfo targetMethod)
        {
            var items = new[] { targetMethod };
            var searchPool = items.AsFuzzyList();
            PredicateBuilder.AddPredicates(searchPool, method);
            var match = searchPool.BestMatch(.66);

            return match != null;
        }
        public bool CanHandle(MethodInfo method)
        {
            if (MethodSpec == null || MethodSpec.MethodBody == null)
                return false;

            var builder = new PredicateBuilder();
            builder.MatchCovariantParameterTypes = false;
            builder.MatchCovariantReturnType = false;
            builder.MatchParameterTypes = true;

            builder.ArgumentTypes.AddRange(MethodSpec.ParameterTypes);
            builder.ReturnType = MethodSpec.ReturnType;

            // Find the method that matches the given name or
            // the alias
            var methodNames = new List<string>();
            methodNames.Add(MethodSpec.MethodName);

            if (MethodSpec.Aliases.Count > 0)
                methodNames.AddRange(MethodSpec.Aliases);

            var found = false;
            var itemList = new[] { method };

            foreach (var name in methodNames)
            {                
                var candidates = itemList.AsFuzzyList();
                builder.MethodName = name;
                builder.AddPredicates(candidates);

                var match = candidates.BestMatch();
                if (match == null)
                    continue;

                found = true;
                break;
            }

            return found;
        }
        private void RunTest()
        {
            var methods = new[] {targetMethod};
            var pool = methods.AsFuzzyList();

            builder.AddPredicates(pool);
            Assert.IsNotNull(pool.BestMatch());
        }