基数を指定して文字列を数値化するには、Convert.ToInt32等のメソッドを使用することができます。 引数fromBaseに基数を指定すると、その基数で表記されている数値として文字列を数値化することができます。 基数には2, 8, 10, 16のいずれかを指定できます。

基数が10の場合において、例えば文字列2147483648をToInt32メソッドで変換する場合は、値が型(Int32)の扱える範囲を超えるため、例外OverflowExceptionがスローされます。 一方、基数が10以外の場合、文字列はその型におけるメモリ上での表現であるものとして変換されます。 そのため、例えば文字列80000000を基数16としてToInt32メソッドで数値に変換する場合は、オーバーフローとはならず、値-2147483648として変換されます。 ただしこの場合でも、値が型の扱える範囲を超えるような場合はOverflowExceptionがスローされます。

基数が10の場合に限り、符号+および-が前置された文字列の場合でも例外はスローされません。 それ以外の基数で符号が前置されている場合は、FormatExceptionとなります。 0埋めされた文字列(数値に桁揃えの0が先行する)場合でも、そのまま変換できます。 一方、前後に空白等が含まれる場合はFormatExceptionとなります。

このほか、0x&Hなどのプレフィックスや、ULなどのサフィックスが含まれる文字列を数値化することはできません。 この場合FormatExceptionがスローされます。 また、桁区切り記号_を含む文字列の場合も同様です。 プレフィックス・サフィックス・桁区切り文字が含まれる文字列を数値化したい場合は、事前に取り除いておく必要があります。

16進表記の場合はafおよびAFは大文字小文字が混在していても数値化することができます。

Convert.ToInt32メソッドを使って基数を指定して文字列を数値化する
using System;

static class Sample {
  static void Main()
  {
    string s = "100";
    Console.WriteLine($"s = \"{s}\"");

    Console.WriteLine("base =  2 : {0}", Convert.ToInt32(s,  2)); // 文字列を 2進数形式の数値としてintに変換する
    Console.WriteLine("base = 10 : {0}", Convert.ToInt32(s, 10)); // 文字列を10進数形式の数値としてintに変換する
    Console.WriteLine("base = 16 : {0}", Convert.ToInt32(s, 16)); // 文字列を16進数形式の数値としてintに変換する
    Console.WriteLine();

    // 基数16で変換する場合は、大文字小文字が混在していても問題なく変換される
    s = "cafe"; Console.WriteLine("s = \"{0}\", base = 16 : {1}", s, Convert.ToInt32(s, 16));
    s = "CaFe"; Console.WriteLine("s = \"{0}\", base = 16 : {1}", s, Convert.ToInt32(s, 16));

    // 基数10以外で変換する場合は、変換先の型におけるメモリ上での表現として解釈される
    // (解釈の結果、型の扱える範囲を超える場合はOverflowExceptionとなる)
    s = "80000000"; Console.WriteLine("s = \"{0}\", base = 16 : {1}", s, Convert.ToInt32(s, 16));

    // 基数10で変換する場合は、符号が前置されていても問題なく変換される
    // (基数10以外では、FormatExceptionとなる)
    s = "+100"; Console.WriteLine("s = \"{0}\", base = 10 : {1}", s, Convert.ToInt32(s, 10));
    s = "-100"; Console.WriteLine("s = \"{0}\", base = 10 : {1}", s, Convert.ToInt32(s, 10));

    // 0埋めされている場合でも、問題なく変換される
    s = "010"; Console.WriteLine("s = \"{0}\", base = 16 : {1}", s, Convert.ToInt32(s, 16));
    s = "010"; Console.WriteLine("s = \"{0}\", base = 10 : {1}", s, Convert.ToInt32(s, 10));

    // 前後に空白がある場合はFormatExceptionとなるので、Trim()メソッドであらかじめ除去しておく必要がある
    s = " 1 "; Console.WriteLine("s = \"{0}\", base = 16 : {1}", s, Convert.ToInt32(s.Trim(), 16));
    s = " 1 "; Console.WriteLine("s = \"{0}\", base = 10 : {1}", s, Convert.ToInt32(s.Trim(), 10));
  }
}
実行結果
s = "100"
base =  2 : 4
base = 10 : 100
base = 16 : 256

s = "cafe", base = 16 : 51966
s = "CaFe", base = 16 : 51966
s = "80000000", base = 16 : -2147483648
s = "+100", base = 10 : 100
s = "-100", base = 10 : -100
s = "010", base = 16 : 16
s = "010", base = 10 : 10
s = " 1 ", base = 16 : 1
s = " 1 ", base = 10 : 1

Convert.ToInt32メソッドは文字列をint/Integerに変換します。 このほかにも、変換先・値の型に合わせて以下のメソッドを使用することができます。

基数を指定して文字列→数値の変換を行うメソッド
メソッド 変換先の型
C# VB
Convert.ToSByte sbyte SByte
Convert.ToByte byte Byte
Convert.ToInt16 short Short
Convert.ToUInt16 ushort UShort
Convert.ToInt32 int Integer
Convert.ToUInt32 uint UInteger
Convert.ToInt64 long Long
Convert.ToUInt64 ulong ULong