コード例 #1
0
        /// <summary>
        /// Defines a new replacement for an artifical parameter.
        /// </summary>
        /// <param name="indicatorParameterIdentifier">
        /// The identifier of the indicator (=dummy) parameter that needs to be replaced.
        /// This parameter will always be removed from the genomes set of active parameters.
        /// </param>
        /// <param name="indicatorParameterValue">
        /// If the <paramref name="indicatorParameterIdentifier"/> is set to <paramref name="indicatorParameterValue"/>
        /// in the current genome, the <paramref name="controlledParameterIdentifier"/>/<paramref name="nativeOverrideValue"/>
        /// will be inserted in the set of the <see cref="Genome.GetActiveGenes"/>.
        /// </param>
        /// <param name="controlledParameterIdentifier">
        /// The identifier of the parameter that will be inserted for <paramref name="indicatorParameterIdentifier"/>
        /// when it has the value <paramref name="indicatorParameterValue"/>.
        /// </param>
        /// <param name="nativeOverrideValue">
        /// The value to insert for <paramref name="controlledParameterIdentifier"/>.
        /// </param>
        /// <typeparam name="T">
        /// The value type of the inserted <see cref="Allele{T}"/>.
        /// </typeparam>
        /// <returns>
        /// The added <see cref="ParameterReplacementDefinition"/>.
        /// </returns>
        public ParameterReplacementDefinition DefineParameterReplacement <T>(
            string indicatorParameterIdentifier,
            object indicatorParameterValue,
            string controlledParameterIdentifier,
            T nativeOverrideValue)
        {
            lock (this._filterLock)
            {
                if (this.IsIndicatorParameterAndValueCombinationDefined(indicatorParameterIdentifier, indicatorParameterValue))
                {
                    throw new InvalidOperationException(
                              $"You cannot add more than one active ParameterReplacementDefinition for a given combination of {nameof(indicatorParameterIdentifier)}/{nameof(indicatorParameterValue)}.\r\nA replacement for <{indicatorParameterIdentifier}, {indicatorParameterValue}> is already defined.");
                }

                var wrapper = new ParameterReplacementDefinition(
                    indicatorParameterIdentifier,
                    indicatorParameterValue,
                    controlledParameterIdentifier);
                wrapper.SetNativeOverrideValue(nativeOverrideValue);
                this.ActiveParameterReplacements.Add(wrapper);
                return(wrapper);
            }
        }