1
+ using System ;
2
+
3
+ namespace Python . Runtime ;
4
+
5
+ public partial class PyObject : IConvertible
6
+ {
7
+ public virtual TypeCode GetTypeCode ( ) => TypeCode . Object ;
8
+
9
+ private T DoConvert < T > ( )
10
+ {
11
+ using var _ = Py . GIL ( ) ;
12
+ if ( Converter . ToPrimitive ( Reference , typeof ( T ) , out object ? result , setError : false ) )
13
+ {
14
+ return ( T ) result ! ;
15
+ }
16
+ else
17
+ {
18
+ throw new InvalidCastException ( ) ;
19
+ }
20
+ }
21
+
22
+ public bool ToBoolean ( IFormatProvider provider ) => DoConvert < bool > ( ) ;
23
+ public byte ToByte ( IFormatProvider provider ) => DoConvert < byte > ( ) ;
24
+ public char ToChar ( IFormatProvider provider ) => DoConvert < char > ( ) ;
25
+ public short ToInt16 ( IFormatProvider provider ) => DoConvert < short > ( ) ;
26
+ public int ToInt32 ( IFormatProvider provider ) => DoConvert < int > ( ) ;
27
+ public long ToInt64 ( IFormatProvider provider ) => DoConvert < long > ( ) ;
28
+ public sbyte ToSByte ( IFormatProvider provider ) => DoConvert < sbyte > ( ) ;
29
+ public ushort ToUInt16 ( IFormatProvider provider ) => DoConvert < ushort > ( ) ;
30
+ public uint ToUInt32 ( IFormatProvider provider ) => DoConvert < uint > ( ) ;
31
+ public ulong ToUInt64 ( IFormatProvider provider ) => DoConvert < ulong > ( ) ;
32
+
33
+ public float ToSingle ( IFormatProvider provider ) => DoConvert < float > ( ) ;
34
+ public double ToDouble ( IFormatProvider provider ) => DoConvert < double > ( ) ;
35
+
36
+ public string ToString ( IFormatProvider provider ) => DoConvert < string > ( ) ;
37
+
38
+ public DateTime ToDateTime ( IFormatProvider provider ) => throw new InvalidCastException ( ) ;
39
+ public decimal ToDecimal ( IFormatProvider provider ) => throw new InvalidCastException ( ) ;
40
+
41
+ public object ToType ( Type conversionType , IFormatProvider provider )
42
+ {
43
+ if ( Converter . ToManaged ( Reference , conversionType , out object ? result , setError : false ) )
44
+ {
45
+ return result ! ;
46
+ }
47
+ else
48
+ {
49
+ throw new InvalidCastException ( ) ;
50
+ }
51
+ }
52
+
53
+ }
0 commit comments