オーバーフローを起こさずにint/Integer同士の積を求めたい場合、BigMulメソッドを用いることができます。 このメソッドは二つのint/Integerを引数にとり、それらの積をlong/Long型で返します。
Math.BigMulメソッドを使ってオーバーフローを起こさずに32ビット整数同士の積を求める
      using System;
class Sample {
  static void Main()
  {
    int a = int.MaxValue;
    int b = 2;
    Console.WriteLine("{0} * {1} = {2}", a, b, Math.BigMul(a, b));
    // 同じ値の積を*演算子で求めるとオーバーフローとなる
    Console.WriteLine("{0} * {1} = {2}", a, b, a * b);
  }
}
オーバーフローのチェックを有効にしている場合
      2147483647 * 2 = 4294967294 ハンドルされていない例外: System.OverflowException: 算術演算の結果オーバーフローが発生しました。 場所 Sample.Main()
オーバーフローのチェックを無効にしている場合
      2147483647 * 2 = 4294967294 2147483647 * 2 = -2
オーバーフローのチェックの有効/無効の切り替えやその際の動作の違いなどについては整数型のオーバーフローとチェックを参照してください。