Пример #1
0
        private static unsafe string Ctor(sbyte *value, int startIndex, int length)
        {
            if (startIndex < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(startIndex), SR.ArgumentOutOfRange_StartIndex);
            }

            if (length < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(length), SR.ArgumentOutOfRange_NegativeLength);
            }

            if (value == null)
            {
                if (length == 0)
                {
                    return(Empty);
                }

                ArgumentNullException.Throw(nameof(value));
            }

            byte *pStart = (byte *)(value + startIndex);

            // overflow check
            if (pStart < value)
            {
                throw new ArgumentOutOfRangeException(nameof(value), SR.ArgumentOutOfRange_PartialWCHAR);
            }

            return(CreateStringForSByteConstructor(pStart, length));
        }
Пример #2
0
        private static unsafe string Ctor(sbyte *value, int startIndex, int length, Encoding?enc)
        {
            if (enc == null)
            {
                return(new string(value, startIndex, length));
            }

            if (length < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(length), SR.ArgumentOutOfRange_NeedNonNegNum);
            }

            if (startIndex < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(startIndex), SR.ArgumentOutOfRange_StartIndex);
            }

            if (value == null)
            {
                if (length == 0)
                {
                    return(Empty);
                }

                ArgumentNullException.Throw(nameof(value));
            }

            byte *pStart = (byte *)(value + startIndex);

            // overflow check
            if (pStart < value)
            {
                throw new ArgumentOutOfRangeException(nameof(startIndex), SR.ArgumentOutOfRange_PartialWCHAR);
            }

            return(enc.GetString(new ReadOnlySpan <byte>(pStart, length)));
        }