protected override ISetting MergeSettings(ISetting left, ISetting right)
        {
            SettingMultiEnumValue leftValue  = new SettingMultiEnumValue(left.RawValue);
            SettingMultiEnumValue rightValue = new SettingMultiEnumValue(right.RawValue);

            RawValue = (leftValue + rightValue).ToString();

            return(this);
        }
        public override void Parse <TValue>(TValue value)
        {
            string[] baseValue = value as string[];

            if (baseValue == null)
            {
                throw new ArgumentException($"value must be '{typeof( string[] ).FullName}'");
            }

            SettingMultiEnumValue enumValue = new SettingMultiEnumValue(baseValue);

            RawValue = enumValue.Value;
        }
        public override bool IsValid(string minValue, string maxValue, bool isRequired)
        {
            if (isRequired && String.IsNullOrEmpty(RawValue))
            {
                return(false);
            }

            SettingMultiEnumValue value             = new SettingMultiEnumValue(RawValue);
            SettingMultiEnumValue extractedMinValue = new SettingMultiEnumValue(minValue);
            SettingMultiEnumValue extractedMaxValue = new SettingMultiEnumValue(maxValue);

            // Текущее значение перечислимого типа должно быть надмножеством minValue и подмножеством maxValue
            return(extractedMinValue.IsSubsetOf(value) && value.IsSubsetOf(extractedMaxValue));
        }