Это подробно описано здесь , в превосходном блоге Эрика Липперта.
Короче говоря, это связано с тем, что оператор приведения C # означает разные вещи в разных контекстах. Лучше всего думать о int как о неявном операторе преобразования , позволяющем ему быть преобразованным в удвоение, но если во время компиляции тип не известен как int, это выиграет не беги. В конце концов, object
не не имеет неявный (или явный) оператор преобразования, способный преобразовывать этот тип, и это то, что вы, по-видимому, пытаетесь сделать.
Теперь при желании можно было бы проделать еще некоторую работу за кулисами, чтобы определить, существует ли способ ее преобразования, но, поскольку это нетривиально, лучше всего оставить такой универсальный вспомогательный метод, как Convert.ToDouble(object)
.