Вы пытаетесь привести (не конвертировать) из double в int, что не сработает. Вам нужно сделать неявное преобразование или использовать Convert.ToInt32 () - поскольку аргумент на самом деле имеет тип объекта, я думаю, вам понадобится последний, чтобы компилятор был доволен. Вам решать, хотите ли вы включить поставщика формата культуры или нет.
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Convert.ToInt32(value);
}
Вы можете использовать оператор приведения, когда объект имеет одинаковую форму , то есть когда один объект является экземпляром типа, к которому вы приводите. Например, если класс Foo расширяет класс Bar, то вы можете привести объект типа Foo к типу Bar - поскольку объект Foo имеет все методы и свойства, которые имел бы объект Bar. Однако вы не можете привести объект типа Bar к типу Foo, потому что Foo изменяет (или может изменить, поскольку это касается компилятора) форму Bar, добавляя методы или свойства, которые Барный объект не имеет.
В вашем случае вы имеете дело с примитивными типами, которые разделяют только интерфейс объекта - между ними нет отношений наследования, за исключением того, что они оба происходят от объекта. Однако между ними существует неявное преобразование . Вы можете назначить объект одного типа переменной другого, хотя вы можете потерять некоторую точность в значении.
double x = 1.1;
int y = 0;
y = x; // implicit conversion, this works, y will be 1
x = y; // implicit conversion, this works, x will be 1.0
Вы не можете, однако, привести объект одного типа к другому. Приведение подразумевает, что вы будете использовать объект, как если бы он был другого типа. В этом случае формы отличаются, и это невозможно сделать.