5666 {
5667 byte* digits = stackalloc byte[769];
5668 NumberBuffer number = new NumberBuffer(NumberBufferKind.FloatingPoint, digits, 769);
5670 {
5671 ReadOnlySpan<char> span =
value.Trim();
5672 if (span.EqualsOrdinalIgnoreCase(
info.PositiveInfinitySymbol))
5673 {
5674 result = double.PositiveInfinity;
5675 }
5676 else if (span.EqualsOrdinalIgnoreCase(
info.NegativeInfinitySymbol))
5677 {
5678 result = double.NegativeInfinity;
5679 }
5680 else if (span.EqualsOrdinalIgnoreCase(
info.NaNSymbol))
5681 {
5682 result = double.NaN;
5683 }
5685 {
5686 span = span.Slice(
info.PositiveSign.Length);
5687 if (span.EqualsOrdinalIgnoreCase(
info.PositiveInfinitySymbol))
5688 {
5689 result = double.PositiveInfinity;
5690 }
5691 else
5692 {
5693 if (!span.EqualsOrdinalIgnoreCase(
info.NaNSymbol))
5694 {
5695 result = 0.0;
5696 return false;
5697 }
5698 result = double.NaN;
5699 }
5700 }
5701 else
5702 {
5703 if ((!span.StartsWith(
info.NegativeSign,
StringComparison.OrdinalIgnoreCase) || !span.Slice(
info.NegativeSign.Length).EqualsOrdinalIgnoreCase(
info.NaNSymbol)) && (!
info.AllowHyphenDuringParsing || !
SpanStartsWith(span,
'-') || !span.Slice(1).EqualsOrdinalIgnoreCase(
info.NaNSymbol)))
5704 {
5705 result = 0.0;
5706 return false;
5707 }
5708 result = double.NaN;
5709 }
5710 }
5711 else
5712 {
5714 }
5715 return true;
5716 }
static bool SpanStartsWith(ReadOnlySpan< char > span, char c)
static unsafe bool TryStringToNumber(ReadOnlySpan< char > value, NumberStyles styles, ref NumberBuffer number, NumberFormatInfo info)
static double NumberToDouble(ref NumberBuffer number)