{"record":{"id":"be881506212a2faf","repo":"dotnet/wpf","slug":"modifiability","errorCode":null,"errorMessage":"Modifiability","messagePattern":"Modifiability","errorType":"validation","errorClass":"InvalidEnumArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/LocalizabilityAttribute.cs","lineNumber":96,"sourceCode":"\n                _readability = value;\n            }\n        }\n\n        /// <summary>\n        /// Get or set the modifiability of the attribute's targeted value\n        /// </summary>\n        /// <value>Modifiability</value>\n        public Modifiability Modifiability\n        {\n            get { return _modifiability; }\n            set \n            {\n                if (   value != Modifiability.Unmodifiable\n                    && value != Modifiability.Modifiable\n                    && value != Modifiability.Inherit)\n                {\n                    throw new InvalidEnumArgumentException(\"Modifiability\", (int) value, typeof(Modifiability));\n                }\n\n                _modifiability = value;\n            }            \n        }\n\n        //--------------------------------------------\n        // Private members\n        //--------------------------------------------\n        private LocalizationCategory _category;\n        private Readability          _readability;\n        private Modifiability        _modifiability;\n}\n}\n","sourceCodeStart":78,"sourceCodeEnd":111,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/LocalizabilityAttribute.cs#L78-L111","documentation":"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.","triggerScenarios":"Assigning attribute.Modifiability = (Modifiability)undefinedInt, or mistakenly assigning a Readability/LocalizationCategory value to Modifiability.","commonSituations":"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.","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"],"exampleFix":"// before\nattr.Modifiability = (Modifiability)readabilityRaw; // wrong enum\n// after\nModifiability m = (Modifiability)rawValue;\nattr.Modifiability = (m == Modifiability.Modifiable || m == Modifiability.Unmodifiable || m == Modifiability.Inherit)\n    ? m : Modifiability.Inherit;","handlingStrategy":"validation","validationCode":"if (value != Modifiability.Unmodifiable && value != Modifiability.Modifiable && value != Modifiability.Inherit) throw new ArgumentException(\"Invalid Modifiability\");","typeGuard":"static bool IsValidModifiability(Modifiability m) => m is Modifiability.Unmodifiable or Modifiability.Modifiable or Modifiability.Inherit;","tryCatchPattern":"try { attr.Modifiability = value; }\ncatch (InvalidEnumArgumentException) { attr.Modifiability = Modifiability.Inherit; }","preventionTips":["Assign only named Modifiability constants","Watch for cross-enum copy-paste (Readability vs Modifiability)","Validate raw ints with Enum.IsDefined before casting"],"tags":["wpf","localization","enum","property"],"backgroundTag":"invalid-enum-value","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}