397 {
398 ulong num = 0uL;
399 if (radix == 10 && !isUnsigned)
400 {
401 ulong num2 = 922337203685477580uL;
402 int result;
403 while (i <
s.Length &&
IsDigit(
s[i], radix, out result))
404 {
405 if (num > num2 || (
long)num < 0
L)
406 {
407 Number.ThrowOverflowException(TypeCode.Int64);
408 }
409 num = (ulong)((long)num * (long)radix + result);
411 }
412 if ((
long)num < 0
L && num != 9223372036854775808uL)
413 {
414 Number.ThrowOverflowException(TypeCode.Int64);
415 }
416 }
417 else
418 {
419 ulong num2 = radix switch
420 {
421 8 => 2305843009213693951uL,
422 16 => 1152921504606846975uL,
423 10 => 1844674407370955161uL,
424 _ => 9223372036854775807uL,
425 };
426 int result2;
427 while (i <
s.Length &&
IsDigit(
s[i], radix, out result2))
428 {
429 if (num > num2)
430 {
431 Number.ThrowOverflowException(TypeCode.UInt64);
432 }
433 ulong num3 = (ulong)((long)num * (long)radix + result2);
434 if (num3 < num)
435 {
436 Number.ThrowOverflowException(TypeCode.UInt64);
437 }
438 num = num3;
440 }
441 }
442 return (long)num;
443 }
static bool IsDigit(char c, int radix, out int result)