【问题标题】:Pythonnet: Why are .NET enums type casted to int?Pythonnet:为什么 .NET 枚举类型转换为 int?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多