Ответ 1
С# обеспечивает неявное преобразование от int
до double
. Это языковое решение, а не то, что .NET сделает для вас... поэтому с точки зрения .NET double
не может быть назначено из int
.
(В качестве примера того, почему это зависит от языка, F # не выполняет неявные преобразования для вас так: вам нужно явно указать преобразование.)
Стоит посмотреть документацию для Type.IsAssignableFrom
(очень легко отредактирован для чтения):
Возвращает true, если c и текущий тип представляют один и тот же тип, или если текущий тип находится в иерархии наследования c, или если текущий тип является интерфейсом, который c реализует, или если c является параметром общего типа и текущий тип представляет одно из ограничений c. Возвращает false, если ни одно из этих условий не является истинным, или если c имеет значение null.
Теперь примените это к double
и int
, и вы увидите, что он должен возвращать false.