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
- Whitelist-check with Enum.IsDefined(typeof(Modifiability), value) before assigning
- Use named constants (Modifiability.Modifiable / Unmodifiable / Inherit) rather than raw ints
- 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
- Assign only named Modifiability constants
- Watch for cross-enum copy-paste (Readability vs Modifiability)
- Validate raw ints with Enum.IsDefined before casting
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)