FastQuant.ParameterHelper.GetStrategyParameters C# (CSharp) Method

GetStrategyParameters() public method

public GetStrategyParameters ( string name, object obj ) : ParameterList
name string
obj object
return ParameterList
        public ParameterList GetStrategyParameters(string name, object obj)
        {
            var list = new ParameterList {Name = name};
            var pred = new Predicate<Attribute>(a =>
            {
                var t = a.GetType();
                return t.FullName.Contains("ComponentModel") && t.Name != "PropertyTabAttribute" && t.Name != "ToolboxItemAttribute";
            });
            var properties = obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(p => p.GetCustomAttributes(typeof(ParameterAttribute), true).Any());
            foreach(var param in properties.Select(p => new Parameter(p.Name, p.GetValue(obj), p.PropertyType.AssemblyQualifiedName, p.GetCustomAttributes().Where(a => pred(a)).ToArray())))
                list.Add(param);

            var fields = obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(f => f.GetCustomAttributes(typeof(ParameterAttribute), true).Any());
            foreach (var param in fields.Select(f => new Parameter(f.Name, f.GetValue(obj), f.FieldType.AssemblyQualifiedName, f.GetCustomAttributes().Where(a => pred(a)).ToArray())))
                list.Add(param);

            var methods = obj.GetType().GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public).Where(m => m.GetCustomAttributes(typeof (StrategyMethodAttribute), true).Any() && m.GetParameters().Length == 0);
            foreach (var m in methods)
                list.Methods.Add(m.Name);

            return list;
        }