Esempio n. 1
0
        private static bool TryParseGuid(ReadOnlySpan <char> guidString, ref Guid.GuidResult result)
        {
            guidString = guidString.Trim();
            if (guidString.Length == 0)
            {
                result.SetFailure(false, "Format_GuidUnrecognized");
                return(false);
            }
            switch (guidString[0])
            {
            case '(':
                return(Guid.TryParseExactP(guidString, ref result));

            case '{':
                return(!guidString.Contains <char>('-') ? Guid.TryParseExactX(guidString, ref result) : Guid.TryParseExactB(guidString, ref result));

            default:
                return(!guidString.Contains <char>('-') ? Guid.TryParseExactN(guidString, ref result) : Guid.TryParseExactD(guidString, ref result));
            }
        }
        /// <summary>
        /// Delimits all leading occurrences of a set of elements specified
        /// in a readonly span from the span.
        /// </summary>
        /// <param name="span">The source span from which the elements are removed.</param>
        /// <param name="trimElements">The span which contains the set of elements to remove.</param>
        private static int ClampStart <T>(ReadOnlySpan <T> span, ReadOnlySpan <T> trimElements) where T : IEquatable <T>
        {
            int start = 0;

            for (; start < span.Length; start++)
            {
                if (!trimElements.Contains(span[start]))
                {
                    break;
                }
            }

            return(start);
        }
        /// <summary>
        /// Delimits all trailing occurrences of a set of elements specified
        /// in a readonly span from the span.
        /// </summary>
        /// <param name="span">The source span from which the elements are removed.</param>
        /// <param name="start">The start index from which to being searching.</param>
        /// <param name="trimElements">The span which contains the set of elements to remove.</param>
        private static int ClampEnd <T>(ReadOnlySpan <T> span, int start, ReadOnlySpan <T> trimElements) where T : IEquatable <T>
        {
            // Initially, start==len==0. If ClampStart trims all, start==len
            Debug.Assert((uint)start <= span.Length);

            int end = span.Length - 1;

            for (; end >= start; end--)
            {
                if (!trimElements.Contains(span[end]))
                {
                    break;
                }
            }

            return(end - start + 1);
        }