dotnet/wpf · error · InvalidEnumArgumentException

Modifiability

Error message

Modifiability

What it means

The Modifiability property setter of LocalizabilityAttribute accepts only Modifiability.Unmodifiable, Modifiable, or Inherit; any other value throws InvalidEnumArgumentException. This restricts the property to the three defined modifiability levels.

Solutions

  1. Whitelist-check with Enum.IsDefined(typeof(Modifiability), value) before assigning
  2. Use named constants (Modifiability.Modifiable / Unmodifiable / Inherit) rather than raw ints
  3. Audit code that mixes Localizability/Readability/Modifiability values for cross-enum assignment

Example fix

// before
attr.Modifiability = (Modifiability)readabilityRaw; // wrong enum
// after
Modifiability m = (Modifiability)rawValue;
attr.Modifiability = (m == Modifiability.Modifiable || m == Modifiability.Unmodifiable || m == Modifiability.Inherit)
    ? m : Modifiability.Inherit;
Defensive patterns

Strategy: validation

Validate before calling

if (value != Modifiability.Unmodifiable && value != Modifiability.Modifiable && value != Modifiability.Inherit) throw new ArgumentException("Invalid Modifiability");

Type guard

static bool IsValidModifiability(Modifiability m) => m is Modifiability.Unmodifiable or Modifiability.Modifiable or Modifiability.Inherit;

Try / catch

try { attr.Modifiability = value; }
catch (InvalidEnumArgumentException) { attr.Modifiability = Modifiability.Inherit; }

Prevention

When it happens

Trigger: Assigning attribute.Modifiability = (Modifiability)undefinedInt, or mistakenly assigning a Readability/LocalizationCategory value to Modifiability.

Common situations: Generated or reflection-based localization pipelines mapping numeric codes; copy-paste cross-enum mistakes; config or database values that do not match current enum members after version migration.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14). Data as JSON: /api/errors/be881506212a2faf. Report an issue: GitHub.

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/LocalizabilityAttribute.cs:96

                _readability = value;
            }
        }

        /// <summary>
        /// Get or set the modifiability of the attribute's targeted value
        /// </summary>
        /// <value>Modifiability</value>
        public Modifiability Modifiability
        {
            get { return _modifiability; }
            set 
            {
                if (   value != Modifiability.Unmodifiable
                    && value != Modifiability.Modifiable
                    && value != Modifiability.Inherit)
                {
                    throw new InvalidEnumArgumentException("Modifiability", (int) value, typeof(Modifiability));
                }

                _modifiability = value;
            }            
        }

        //--------------------------------------------
        // Private members
        //--------------------------------------------
        private LocalizationCategory _category;
        private Readability          _readability;
        private Modifiability        _modifiability;
}
}

View on GitHub (pinned to 81131a70a4)