Ejemplo n.º 1
0
        public bool TryDecode <T>(PyObject pyObj, out T value)
        {
            value = default;
            if (!typeof(T).IsEnum)
            {
                return(false);
            }

            Type etype = Enum.GetUnderlyingType(typeof(T));

            if (!PyInt.IsIntType(pyObj))
            {
                return(false);
            }

            object result;

            try
            {
                result = pyObj.AsManagedObject(etype);
            }
            catch (InvalidCastException)
            {
                return(false);
            }

            if (Enum.IsDefined(typeof(T), result) || typeof(T).IsFlagsEnum())
            {
                value = (T)Enum.ToObject(typeof(T), result);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
 public static object ToCLI(this PyObject o)
 {
     if (PySequence.IsSequenceType(o))
     {
         var list = new List <object>();
         foreach (PyObject subo in o)
         {
             list.Add(subo.ToCLI());
         }
         return(list);
     }
     if (PyString.IsStringType(o))
     {
         return(o.As <string>());
     }
     if (PyInt.IsIntType(o))
     {
         return(o.As <long>());
     }
     if (PyLong.IsLongType(o))
     {
         return(o.As <long>());
     }
     if (PyFloat.IsFloatType(o))
     {
         return(o.As <double>());
     }
     return(o);
 }
Ejemplo n.º 3
0
        public void TestIsIntTypeFalse()
        {
            var s = new PyString("Foo");

            Assert.False(PyInt.IsIntType(s));
        }
Ejemplo n.º 4
0
        public void TestIsIntTypeTrue()
        {
            var i = new PyInt(5);

            Assert.True(PyInt.IsIntType(i));
        }
Ejemplo n.º 5
0
 public static bool IsInt(this PyObject obj)
 {
     return(PyInt.IsIntType(obj));
 }