【发布时间】:2021-01-25 17:01:19
【问题描述】:
为什么 .NET 枚举类型转换为 int?
例如:我想生成一个Objects 数组,其中第一个元素是Int32,第二个元素是Double,第三个元素是DateTimeKind 类型的枚举。见以下代码:
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?
【问题讨论】:
-
对不起,我不是来自 python 世界。我将“Why are .NET enums type cast to int?”添加到 C# 标记中。鉴于
DateTimeKind是一个整数ref。它被强制转换为 int 看起来很自然。我不是在教书,也不是在教书,也不是在尝试回答我不了解的领域。 -
我拥有的唯一信息是这个 github 问题 github.com/pythonnet/pythonnet/issues/935 和相关问题。我没有 Py 背景来尝试或理解它。
-
该相关问题作为标题中的多个参数github.com/pythonnet/pythonnet/issues/1099
-
所以看起来没有变通办法,
I think we should disable implicit .NET enum <-> Python int conversion in 3.0。 -
Pinging/订阅/对 github 问题表现出兴趣,可能有助于为此找到一条路径。目前没有拉请求解决这个问题。也许您可以更改 C# 签名以接受 int 并在 C# 端进行转换。
标签: c# enums casting python.net