Example #1
0
        private static Delegate DiscoverParser <T, TParser>(string parserName) where TParser : Delegate
        {
            var parserInfo      = typeof(TParser).GetMethod("Invoke");
            var parserSignature = new MethodSignature(parserInfo, parserName, MethodAttributes.Public | MethodAttributes.Static);

            var type             = typeof(T);
            var parserCandidates = type.GetMethods(BindingFlags.Public | BindingFlags.Static).Where(x => x.Name == parserName);

            var parsers = parserCandidates.
                          Where(x => parserSignature.IsCompatibelWith(x)).
                          Select(x => (Method: x, ParameterCount: x.GetParameters().Length)).
                          OrderBy(x => x.ParameterCount);

            var firstParameter = parsers.FirstOrDefault();

            if (firstParameter.Equals(default))