{"record":{"id":"4d0d7506fc1d1d17","repo":"dotnet/wpf","slug":"collection-copyto-arraycannotbemultidimensional-4d0d75","errorCode":null,"errorMessage":"Collection_CopyTo_ArrayCannotBeMultidimensional","messagePattern":"Collection_CopyTo_ArrayCannotBeMultidimensional","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/TextFormatting/ThousandthOfEmRealPoints.cs","lineNumber":114,"sourceCode":"        public void Clear()\n        {\n            _xArray.Clear();\n            _yArray.Clear();\n        }\n\n        public bool Contains(Point item)\n        {\n            return IndexOf(item) >= 0;\n        }\n\n        public void CopyTo(Point[] array, int arrayIndex)\n        {\n            // parameter validations\n            ArgumentNullException.ThrowIfNull(array);\n\n            if (array.Rank != 1)\n            {\n                throw new ArgumentException(\n                    SR.Collection_CopyTo_ArrayCannotBeMultidimensional, \n                    nameof(array));                \n            }\n\n            ArgumentOutOfRangeException.ThrowIfNegative(arrayIndex);\n\n            if (arrayIndex >= array.Length)\n            {\n                throw new ArgumentException(\n                    SR.Format(\n                        SR.Collection_CopyTo_IndexGreaterThanOrEqualToArrayLength, \n                        \"arrayIndex\", \n                        \"array\"),\n                    nameof(arrayIndex));\n            }\n\n            if ((array.Length - Count - arrayIndex) < 0)\n            {","sourceCodeStart":96,"sourceCodeEnd":132,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/TextFormatting/ThousandthOfEmRealPoints.cs#L96-L132","documentation":"ThousandthOfEmRealPoints.CopyTo throws ArgumentException(SR.Collection_CopyTo_ArrayCannotBeMultidimensional) when the destination Array has Rank != 1. As a fixed-size Point collection implementing ICollection, it only supports single-dimensional destinations per the standard .NET contract.","triggerScenarios":"Calling CopyTo with a multidimensional destination such as Point[,], directly or through ICollection/ICollection<Point> casts.","commonSituations":"Storing glyph origins in 2D grids; generic Array-taking copy helpers; translating code that assumed jagged/dimensional array support.","solutions":["Pass a single-dimensional Point[] as destination","Copy into a flat Point[] then map into your 2D structure yourself","Pre-check array.Rank == 1 before calling CopyTo"],"exampleFix":"// before\nvar dest = new Point[count, 2];\ncollection.CopyTo(dest, 0);\n// after\nvar dest = new Point[count];\ncollection.CopyTo(dest, 0);","handlingStrategy":"validation","validationCode":"ArgumentNullException.ThrowIfNull(dest);\nif (dest.Rank != 1) throw new ArgumentException(\"dest must be 1-D\", nameof(dest));\ncollection.CopyTo(dest, index);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use Point[] (1-D) destinations for CopyTo","Assert Rank == 1 in generic copy utilities","Map flat results into 2D structures after the copy if needed"],"tags":["wpf","collections","copyto","argument-exception"],"backgroundTag":"invalid-argument-value","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}