Приведение будет успешным, только если объект, возвращаемый datareader["percent"]
, имеет тип Decimal
. Преобразование будет успешным, когда объект любого типа будет преобразован в Decimal
. Это включает int
, long
, short
и т. Д. Или, в более общем случае, все, что реализует IConvertible
и возвращает полезное значение из IConvertible.ToDecimal()
, может быть передано Convert.ToDecimal()
.
Например:
csharp> object a = (int)1;
csharp> a.GetType();
System.Int32
csharp> var dec = (decimal)a;
System.InvalidCastException: Cannot cast from source type to destination type.
at Class3.Host (System.Object& $retval) [0x00000] in <filename unknown>:0
at Mono.CSharp.Evaluator.Evaluate (System.String input, System.Object& result, System.Boolean& result_set) [0x00000] in <filename unknown>:0
at Mono.CSharpShell.Evaluate (System.String input) [0x00000] in <filename unknown>:0
csharp> var dec = Convert.ToDecimal(a);
csharp> dec;
1
csharp> dec.GetType();
System.Decimal