/// <summary>
 /// Konstruktor mit standardisierten Parametern (final)
 /// </summary>
 /// <param name="_modeName">Vergleichsmodus für das Name-Attribut</param>
 /// <param name="_modeType">Vergleichsmodus für das Type-Attribut</param>
 /// <param name="_modeRarity">Vergleichsmodus für das Seltenheits-Attribut</param>
 /// <param name="_nameContains">Name-Attribut Einschränkungen</param>
 /// <param name="_typeContains">Type-Attribut Einschränkungen</param>
 /// <param name="_rarityName">RarityName-Attribut Einschränkungen</param>
 /// <param name="_allowedTypes">Einschränkung für erlaubte Type-Attribute</param>
 /// <param name="_allowedRarities">Einschränkung für erlaubte Seltenheiten</param>
 /// <param name="_allowedAtrributes">Einschränkung für erlaubte <see cref="Loot3Framework.Types.Attributes"/></param>
 /// <param name="_rarityLowerBound">Einschränkung für die untere Grenze des Rarity-Attributs</param>
 /// <param name="_rarityUpperBound">Einschränkung für für die obere Grenze des Rarity-Attributs</param>
 public ConfigurableFilter(
     StringComparing _modeName   = StringComparing.NonCaseSensitiveInclude,
     StringComparing _modeType   = StringComparing.NonCaseSensitiveInclude,
     StringComparing _modeRarity = StringComparing.NonCaseSensitiveInclude,
     string _nameContains        = "",
     string _typeContains        = "",
     string _rarityName          = "",
     string[] _allowedTypes      = null,
     string[] _allowedRarities   = null,
     string[] _allowedAtrributes = null,
     int _rarityLowerBound       = 0, int _rarityUpperBound = 1000)
 {
     modes             = new StringComparing[] { _modeName, _modeType, _modeRarity };
     nameContains      = _nameContains;
     typeContains      = _typeContains;
     rarityName        = _rarityName;
     allowedTypes      = _allowedTypes;
     allowedRarities   = _allowedRarities;
     allowedAttributes = _allowedAtrributes;
     rarityLowerBound  = _rarityLowerBound;
     rarityUpperBound  = _rarityUpperBound;
 }
        /// <summary>
        /// Vergleicht zwei <see cref="string"/>s abhängig vom weiteren Input
        /// </summary>
        /// <param name="a">Das erweiterte Objekt</param>
        /// <param name="b">Der zweite <see cref="string"/></param>
        /// <param name="mode">Die Vergleichsparameter</param>
        /// <returns>Ja wenn alle Anforderungen erfüllt sind</returns>
        public static bool CompareToString(this string a, string b, StringComparing mode)
        {
            a = a ?? "";
            b = b ?? "";
            switch (mode)
            {
            case StringComparing.CaseSensitiveEqual:
                return(a == b);

            case StringComparing.CaseSensitiveInclude:
                return(a.Contains(b));

            case StringComparing.NonCaseSensitiveEqual:
                return(a.ToUpper() == b.ToUpper());

            case StringComparing.NonCaseSensitiveInclude:
                return(a.ToUpper().Contains(b.ToUpper()));

            default:
                throw new Exception();
            }
        }