{"record":{"id":"33a160620cd9e556","repo":"dotnet/wpf","slug":"sr-textrangeprovider-invalidrangeprovider","errorCode":null,"errorMessage":"SR.TextRangeProvider_InvalidRangeProvider","messagePattern":"SR\\.TextRangeProvider_InvalidRangeProvider","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/Automation/TextRangeProviderWrapper.cs","lineNumber":50,"sourceCode":"\n        //------------------------------------------------------\n        //\n        //  Interface ITextRangeProvider\n        //\n        //------------------------------------------------------\n \n        #region Interface ITextRangeProvider\n\n        public ITextRangeProvider Clone()\n        {\n            return (ITextRangeProvider)ElementUtil.Invoke(_peer, new DispatcherOperationCallback(Clone), null);\n        }\n\n        public bool Compare(ITextRangeProvider range)\n        {\n            if (!(range is TextRangeProviderWrapper))\n            {\n                throw new ArgumentException(SR.Format(SR.TextRangeProvider_InvalidRangeProvider, \"range\"));\n            }\n\n            return (bool)ElementUtil.Invoke(_peer, new DispatcherOperationCallback(Compare), range);\n        }\n\n        public int CompareEndpoints(TextPatternRangeEndpoint endpoint, ITextRangeProvider targetRange, TextPatternRangeEndpoint targetEndpoint)\n        {\n            if (!(targetRange is TextRangeProviderWrapper))\n            {\n                throw new ArgumentException(SR.Format(SR.TextRangeProvider_InvalidRangeProvider, \"targetRange\"));\n            }\n\n            object[] args = new object[] { endpoint, targetRange, targetEndpoint };\n            return (int)ElementUtil.Invoke(_peer, new DispatcherOperationCallback(CompareEndpoints), args);\n        }\n\n        public void ExpandToEnclosingUnit(TextUnit unit)\n        {","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/Automation/TextRangeProviderWrapper.cs#L32-L68","documentation":"ArgumentException thrown by TextRangeProviderWrapper.Compare when the passed ITextRangeProvider was not created by the same WPF text pattern peer (i.e. it is not a TextRangeProviderWrapper), so the ranges cannot be meaningfully compared.","triggerScenarios":"Thrown at src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/Automation/TextRangeProviderWrapper.cs:50 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Obtain both ranges from the same text provider (clone the range with RangeFromChild/RangeFromPoint/DocumentRange instead of mixing providers)","Before comparing, verify the range is a TextRangeProviderWrapper of the same peer","Return false for ranges from foreign providers instead of letting the wrapper throw"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}