Por que essa conversão não funciona?

O código a seguir se comporta de maneira estranha (pelo menos para mim):

int testValue = 1234;

this.ConversionTest( testValue );

private void ConversionTest( object value )
{
    long val_1 = (long) (int) value; // works
    long val_2 = (long) value;       // InvalidCastException
}

Não entendo por que o elenco direto (explícito) para longo não funciona. Alguém pode explicar esse comportamento?

obrigado

questionAnswers(1)

yourAnswerToTheQuestion