示例#1
0
            public static float GetScienceValue(Dictionary <string, int> experimentCount, ScienceExperiment experiment,
                                                ScienceSubject currentScienceSubject,
                                                Func <ScienceExperiment, ScienceSubject, float> GetScienceValue     = null,
                                                Func <ScienceExperiment, ScienceSubject, float> GetNextScienceValue = null)
            {
                //Call via generic method to account for "new" modifiers in custom implementations of ScienceExperiment
                var args = new object[]
                {
                    experimentCount,
                    experiment,
                    currentScienceSubject,
                    GetScienceValue,
                    GetNextScienceValue
                };

                var m = _getScienceValueGenericMethod ?? (_getScienceValueGenericMethod =
                                                              typeof(Science).GetMethods(BindingFlags.Static | BindingFlags.Public)
                                                              .First(e => e.IsGenericMethod && e.Name == nameof(GetScienceValue) && e.GetParameters().Length == args.Length));

                return((float)m.MakeGenericMethod(experiment?.GetType() ?? typeof(ScienceExperiment)).Invoke(null, args));
            }