446 {
447 uint num = 0u;
448 if (radix == 10 && !isUnsigned)
449 {
450 uint num2 = 214748364u;
451 int result;
452 while (i <
s.Length &&
IsDigit(
s[i], radix, out result))
453 {
454 if (num > num2 || (int)num < 0)
455 {
456 Number.ThrowOverflowException(TypeCode.Int32);
457 }
458 num = (uint)((int)num * radix + result);
460 }
461 if ((int)num < 0 && num != 2147483648u)
462 {
463 Number.ThrowOverflowException(TypeCode.Int32);
464 }
465 }
466 else
467 {
468 uint num2 = radix switch
469 {
470 8 => 536870911u,
471 16 => 268435455u,
472 10 => 429496729u,
473 _ => 2147483647u,
474 };
475 int result2;
476 while (i <
s.Length &&
IsDigit(
s[i], radix, out result2))
477 {
478 if (num > num2)
479 {
480 Number.ThrowOverflowException(TypeCode.UInt32);
481 }
482 uint num3 = (uint)((int)num * radix + result2);
483 if (num3 < num)
484 {
485 Number.ThrowOverflowException(TypeCode.UInt32);
486 }
487 num = num3;
489 }
490 }
491 return (int)num;
492 }
static bool IsDigit(char c, int radix, out int result)