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)); }
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))); }