{"record":{"id":"5713d3bdea4d502c","repo":"dotnet/wpf","slug":"autocomplete","errorCode":null,"errorMessage":"autoComplete","messagePattern":"autoComplete","errorType":"validation","errorClass":"InvalidEnumArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Input/TextComposition.cs","lineNumber":86,"sourceCode":"        #region Constructors\n\n        /// <summary>\n        ///     The constrcutor of TextComposition class.\n        /// </summary>\n        public TextComposition(InputManager inputManager, IInputElement source, string resultText) : this(inputManager, source,  resultText, TextCompositionAutoComplete.On)\n        {\n        }\n\n        /// <summary>\n        ///     The constrcutor of TextComposition class.\n        /// </summary>\n        public TextComposition(InputManager inputManager, IInputElement source, string resultText, TextCompositionAutoComplete autoComplete) : this(inputManager, source, resultText, autoComplete, InputManager.Current.PrimaryKeyboardDevice)\n        {\n            // We should avoid using Enum.IsDefined for performance and correct versioning. \n            if ((autoComplete != TextCompositionAutoComplete.Off) &&\n                (autoComplete != TextCompositionAutoComplete.On))\n            {\n                throw new InvalidEnumArgumentException(\"autoComplete\", \n                                                       (int)autoComplete, \n                                                       typeof(TextCompositionAutoComplete));\n            }\n        }\n\n        //\n        // An internal constructore to specify InputDevice directly.\n        //\n        internal TextComposition(InputManager inputManager, IInputElement source, string resultText, TextCompositionAutoComplete autoComplete, InputDevice inputDevice)\n        {\n            _inputManager = inputManager;\n\n            _inputDevice = inputDevice;\n\n            if (resultText == null)\n            {\n                throw new ArgumentException(SR.TextComposition_NullResultText);\n            }","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Input/TextComposition.cs#L68-L104","documentation":"The TextComposition constructor (TextComposition.cs:86) throws InvalidEnumArgumentException(\"autoComplete\", ...) when the autoComplete argument is anything other than TextCompositionAutoComplete.Off or TextCompositionAutoComplete.On. This is an eager public-API argument check to avoid Enum.IsDefined's performance and versioning pitfalls.","triggerScenarios":"Calling new TextComposition(inputManager, source, text, autoComplete) with an out-of-range value, e.g. a cast (TextCompositionAutoComplete)5 or a value from a future/other enum version.","commonSituations":"Interop or reflection-based composition code passing raw ints; config-driven autocomplete settings mapped incorrectly; typo mapping a bool to an undefined enum value.","solutions":["Pass only TextCompositionAutoComplete.On or TextCompositionAutoComplete.Off.","Clamp/normalize external input: undefined values should map to Off (the safe default).","Remove casts from int to TextCompositionAutoComplete in interop layers or validate them first."],"exampleFix":"// before\nvar tc = new TextComposition(im, src, text, (TextCompositionAutoComplete)raw);\n// after\nvar ac = raw == 1 ? TextCompositionAutoComplete.On : TextCompositionAutoComplete.Off;\nvar tc = new TextComposition(im, src, text, ac);","handlingStrategy":"validation","validationCode":"if (autoComplete != TextCompositionAutoComplete.On && autoComplete != TextCompositionAutoComplete.Off)\n    throw new ArgumentException(\"autoComplete must be On or Off\");","typeGuard":"static bool IsValidAutoComplete(TextCompositionAutoComplete a) => a == TextCompositionAutoComplete.On || a == TextCompositionAutoComplete.Off;","tryCatchPattern":"try { new TextComposition(im, src, text, autoComplete); } catch (InvalidEnumArgumentException) { /* default to TextCompositionAutoComplete.Off */ }","preventionTips":["Only use TextCompositionAutoComplete.On/Off literal values","Validate config-derived enum values before constructing","Avoid int-to-enum casts in text-services interop code"],"tags":["wpf","text-input","enum","argument-validation"],"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"}