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