public static T InvokeImpl(T arg1, T arg2) { if (null != default(T)) { if (typeof(Int32) == typeof(T)) { return((T)(object)checked ((Int32)(object)arg1 * (Int32)(object)arg2)); } else if (typeof(Int64) == typeof(T)) { return((T)(object)checked ((Int64)(object)arg1 * (Int64)(object)arg2)); } else if (typeof(UInt32) == typeof(T)) { return((T)(object)checked ((UInt32)(object)arg1 * (UInt32)(object)arg2)); } else if (typeof(UInt64) == typeof(T)) { return((T)(object)checked ((UInt64)(object)arg1 * (UInt64)(object)arg2)); } else if (typeof(Int16) == typeof(T)) { return((T)(object)checked ((Int16) unchecked ((int)(Int16)(object)arg1 * (int)(Int16)(object)arg2))); } else if (typeof(UInt16) == typeof(T)) { return((T)(object)checked ((UInt16) unchecked ((uint)(UInt16)(object)arg1 * (uint)(UInt16)(object)arg2))); } else if (typeof(Byte) == typeof(T)) { return((T)(object)checked ((Byte) unchecked ((uint)(Byte)(object)arg1 * (uint)(Byte)(object)arg2))); } else if (typeof(SByte) == typeof(T)) { return((T)(object)checked ((SByte) unchecked ((int)(SByte)(object)arg1 * (int)(SByte)(object)arg2))); } else if (typeof(Int128) == typeof(T)) { return((T)(object)(Int128.Multiply((Int128)(object)arg1, (Int128)(object)arg2))); } else if (typeof(UInt128) == typeof(T)) { return((T)(object)(UInt128.Multiply((UInt128)(object)arg1, (UInt128)(object)arg2))); } } return(InvokeImpl1(arg1, arg2)); }