Когда вы это делаете, вы неявно вставляете десятичный d
в базовый объект:
object o = d;
Вы не можете напрямую вставлять значения в коробке без их первого распаковки, поэтому приведение непосредственно к int, как и в следующем, не выполняется:
int x = (int)o;
Однако, выполняя это (промежуточное отбрасывание до десятичной дроби):
int x = (int)(decimal)o;
Вы сначала распаковываете o
, что означает, что вы извлекаете десятичное значение, , затем , переводящее значение unboxed decimal в int, которое работает, потому что C # поддерживает деление на десятичные числа на int.
Да, пользователь может аутентифицироваться любым количеством способов, если это позволяет OpenID Provider (OP). Обычно OP могут делать это независимо от наличия адреса электронной почты - им просто нужна какая-то другая форма учетных данных, на которую можно положиться.