コード例 #1
0
        public static void AddConstraint(this Solver solver, Type type, string options)
        {
            try
            {
                switch (Activator.CreateInstance(type, solver, options))
                {
                case Constraint constraint:
                    solver.AddConstraint(constraint);
                    break;

                case IConstraintGroup constraintGroup:
                    constraintGroup.AddConstraints(solver);
                    break;
                }
                List <string> constraintStrings;
                if (solver.customInfo.TryGetValue("ConstraintStrings", out object constraintStringsObj))
                {
                    constraintStrings = (List <string>)constraintStringsObj;
                }
                else
                {
                    solver.customInfo["ConstraintStrings"] = constraintStrings = new();
                }

                if (string.IsNullOrWhiteSpace(options))
                {
                    constraintStrings.Add(type.Name);
                }
                else
                {
                    constraintStrings.Add($"{type.Name}:{options}");
                }
            }
            catch (Exception e)
            {
                throw new ArgumentException($"**ERROR** Cannot instantiate constraint {type.Name}: {e.Message}");
            }
        }