object
содержит тип int
. Но он считается объектом (который является упакованным int), и тип значения в штучной упаковке обычно может быть приведен только к его базовому типу (типу в штучной упаковке).
Чтобы привести его к другому типу, сначала необходимо привести его к базовому типу. Это работает:
long longNumber2 = (long) (int) intNumber2;
Причина, по которой работает var
, заключается в том, что компилятор выводит тип во время компиляции. Это означает, что при использовании var
тип intNumber2
(если вы используете typeof
) будет int
. Принимая во внимание, что когда вы используете object
, тип будет object
.
Использование dynamic
- это совершенно другой процесс, и его нельзя сравнивать с var
. Здесь преобразование / приведение происходит во время выполнения, используя отражение и библиотеку DLR. Он будет динамически находить базовый тип, обнаруживать, что он имеет оператор преобразования и использует его.