问题描述
为什么 .NET 枚举类型被强制转换为 int?
例如:我想生成一个 Objects
数组,其中第一个元素是 Int32
,第二个元素是 Double
,第三个元素是 DateTimeKind
类型的枚举{1}}。看下面的代码:
import clr
from System import Array,DateTimeKind,Double,Enum,Int32,Object
a = Array[Object]([None,None,None])
a[0] = Int32(127)
a[1] = Double(12.4)
a[2] = DateTimeKind.Utc
但现在第三个元素的类型是 int
而不是 DateTimeKind
。
调用方法时需要数组 a
作为参数(反射,请参阅 https://stackoverflow.com/a/49997219/7556646)。
我也知道我可以生成一个 b = List[DataTimeKind]()
并将元素添加到该列表中,请参阅 https://stackoverflow.com/a/44088399/7556646。列表 b
具有正确的类型,但是当我访问列表 b[0]
的元素时,它又是一个 int
。
那么我该怎么做才能将 int
转换为 enum
?
解决方法
这在 pythonnet 中是不可能的,因为 pythonnet 将 .NET 枚举转换为 int,参见 https://github.com/pythonnet/pythonnet/issues/1220。
.NET enums should not be automatically converted to Python int and back
唯一的解决方法是添加一个 C# helper dll 并从 pythonnet 调用这个 helper dll。