Pythonnet:为什么将 .NET 枚举类型转换为 int?

时间:2021-01-20 07:44:11

标签: c# enums casting python.net

为什么 .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

1 个答案:

答案 0 :(得分:0)

这在 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。