Объяснение
if (n is int)
ii = (int)n;//doesnt get here.
if (n is long)
ll = (long)n;//doesnt get here.
if (l is int)
ii = (int)l;//doesnt get here
if (l is long)
ll = (long)l;//doesnt get here
n и l не являются ни int / long , ни long? / Int? , они относятся к типу вашего перечисления, так что это ожидаемое поведение.
Решение
Вероятно, вы должны использовать Преобразовать класс, чтобы достичь того, что вы хотите.