public static ulong ToUInt64(string s, int radix)
{
// 引数をチェックをする
CheckNumberArgument(s);
CheckRadixArgument(radix);
var curValue = 0uL; // 変換中の数値
var maxValue = UInt64.MaxValue / (ulong)radix; // 最大値の1けた前の数値
// 数値文字列を解析して数値に変換する
char num; // 処理中の1けたの数値文字列
int digit; // 処理中の1けたの数値
int length = s.Length;
for (int i = 0; i < length; i++)
{
num = s[i];
digit = GetDigitFromNumber(num);
CheckDigitOutOfRange(digit, radix);
// 次にradixを掛けるときに数値がオーバーフローしないかを事前にチェックする
CheckDigitOverflow(curValue, maxValue);
curValue = curValue * (ulong)radix + (ulong)digit;
}
return curValue;
}